2014-06-26 62 views
0

我不是新手到java,但今天我吸了一个小时的问题,我不知道为什么。如何通过对象列表

我的代码looksas如下:

我的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是字符串,它对我来说非常适合。

注意,当我执行此代码:

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

您正在迭代'selectedTheme ** s **',并且'ArrayList'是'selectedTheme'。这是一个错字吗?这听起来像你可能有一个或两个原始类型的地方,因为如果你有正确的通用代码,这样的异常不应该发生,因为代码不会编译...你可以显示更多的代码?我不确定任何人都可以告诉你刚刚提供的内容。 – awksp

+2

看起来像(有这个错误)你有变量的范围问题。提出的异常声称一个字符串是问题,这导致我相信你已经意外地将'selectedThemes'重新定义为一个可以接受的字符串列表。 –

+0

Kodlee Yin maby你是真实的,因为在jsf中,控制器创建一个组件树,也许控制器创建一个字符串列表 – user3521250

回答

0

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

您必须实施自定义转换器(如here所述),或者如果您不介意在其他库中混合,则可以使用OmniFaces的SelectItemsConverter

这个blog post by BalusC也讨论了一些额外的可能策略。

相关问题