Как пройти список объектов

Я не новичок в Java, но сегодня я на 1 час столкнулся с проблемой, не знаю почему.

Мой код выглядит следующим образом:

Мой ArrayList:

    private ArrayList<Theme> selectedThemes;

Моя петля:

for (Theme selectedTheme : selectedThemes) {
        System.out.println(selectedTheme.getNom());
    }

Когда я пытаюсь выполнить код ниже, я получаю это исключение:

java.lang.ClassCastException: java.lang.String cannot be cast to com.mycompany.ecommerce.Modele.Catalogue.Theme

Что я понимаю из исключения, так это то, что selectedTheme являются String, это очень неприятно для меня.

Обратите внимание, что когда я выполняю этот код:

System.out.println(selectedThemes);

он показывает объект списка нормально.

редактировать

Я не уверен, что этот код может иметь отношение к моим проблемам: это SelectManyMenu, который имеет отношение к моему ArrayList

<p:selectManyMenu id="advanced" value="#{jsfClient.selectedThemes}" 
                                      var="t"  showCheckbox="true">
                        <f:selectItems value="#{jsfClient.themes}" var="theme" itemLabel="#{theme.nom}" itemValue="#{theme}" />
                        <p:column>
                            <h:outputText styleClass="ui-theme ui-theme-#{t.nom}" />
                        </p:column>
                        <p:column>
                            <h:outputText value="#{t.nom}" />
                        </p:column>
                    </p:selectManyMenu>

jsfClient - это ManagedBean. Любая помощь, пожалуйста, спасибо.

1 ответ

Проблема в вашем JSF, более конкретно itemValue="#{theme}" часть. JSF не может преобразовать строковое представление вашей темы обратно в Theme объект.

Вы должны либо реализовать пользовательский конвертер, как описано, например, здесь, либо, если вы не против микширования в другой библиотеке, вы можете использовать OmniFaces' SelectItemsConverter,

Некоторые дополнительные возможные стратегии также обсуждаются в этом сообщении в блоге BalusC.

Другие вопросы по тегам