如何浏览对象列表

时间:2014-06-26 00:56:55

标签: java jsf primefaces arraylist selectmanymenu

我不是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。 请帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

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

您必须实现自定义转换器,例如here所述,或者,如果您不介意在另一个库中混音,则可以使用OmniFaces&#39; SelectItemsConverter

blog post by BalusC中还讨论了一些其他可能的策略。