我不是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与数组列表
有关系的<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。如有任何帮助,谢谢。
问题出在JSF中,更具体地说是itemValue="#{theme}"
部分。JSF不能将主题的字符串表示形式转换回Theme
对象。
你要么必须实现一个自定义转换器,如这里所描述的例子,或者,如果你不介意混合在另一个库中,你可以使用OmniFaces的SelectItemsConverter
。
BalusC在这篇博文中还讨论了一些其他可能的策略