我不是java的新手,但今天我误解了一个小时的问题,我不知道为什么。
我的代码如下:
我的ArrayList:
private ArrayList<Theme> selectedThemes;
My Loop:
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。 请帮助,谢谢。
答案 0 :(得分:0)
问题在于您的JSF,更具体地说是itemValue="#{theme}"
部分。 JSF无法将主题的字符串表示形式转换回Theme
对象。
您必须实现自定义转换器,例如here所述,或者,如果您不介意在另一个库中混音,则可以使用OmniFaces&#39; SelectItemsConverter
此blog post by BalusC中还讨论了一些其他可能的策略。