0

我不是java新手,但今天我被一个问题吸了1个小时,我不知道为什么。

我的代码如下所示:

我的数组列表:

    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);

它正常显示列表的对象。

编辑

我不确定这段代码是否与我的问题有关:它是 与我的 ArrayList 相关的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。请任何帮助,谢谢。

4

1 回答 1

0

问题出在您的 JSF 中,更具体的说是itemValue="#{theme}"部分。JSF 无法将主题的字符串表示形式转换回Theme对象。

您要么必须实现自定义转换器,如此所述,或者,如果您不介意在另一个库中混合,您可以使用 OmniFaces' SelectItemsConverter

BalusC在这篇博文中还讨论了一些其他可能的策略。

于 2014-06-26T01:19:25.647 回答