Как пройти список объектов
Я не новичок в 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.