2015-06-04 43 views
0

我想使复选框菜单和数据显示在dataList中。这里是我的XHTML:PrimeFaces p:dataList发出错误“属性'ime'找不到类型java.lang.String”

<h:form> 
<h:panelGrid columns="3" cellpadding="5"> 
    <h:outputLabel for="menu" value="Demonstratori :" /> 
    <p:selectCheckboxMenu id="menu" value="#{nastavnik.odabraniDemonstratori}" label="Demonstratori:" 
            filter="true" filterMatchMode="startsWith" panelStyle="width:250px"> 
     <f:selectItems value="#{nastavnik.sviDemonstratori}" var="demons" itemLabel="#{demons.ime} #{demons.prezime}" itemValue="#{demons}" /> 
    </p:selectCheckboxMenu> 
    <p:commandLink value="Submit" update="display" /> 
</h:panelGrid> 

    <p:outputPanel id="display" style="width:250px;padding-left:5px;margin-top:10px"> 
     <p:dataList value="#{nastavnik.odabraniDemonstratori}" var="d" type="ordered" emptyMessage="Nema odabranih demonstratora"> 
      #{d.ime}" 
     </p:dataList> 
    </p:outputPanel> 
</h:form> 

这里是Nastavnik豆重要代码:

private ArrayList<Demonstrator> odabraniDemonstratori; 
public void setOdabraniDemonstratori(ArrayList<Demonstrator> odabraniDemonstratori) { 
    this.odabraniDemonstratori = odabraniDemonstratori; 
} 


public ArrayList<Demonstrator> getOdabraniDemonstratori() { 
    return odabraniDemonstratori; 
} 

演示bean有物业ime。一切工作很好,但是当我尝试以显示DataList控件数据与#{d.ime},我收到此错误:

/unoslabvezbe.xhtml @84,49 value="#{d.ime}": Property 'ime' not found on type java.lang.String 

d属性的类型为演示不串。任何帮助?

+0

是'示威者a公开课? – DavidS

+0

是它的hibernate bean:@Entity 公共类演示者扩展Korisnik – user3364181

+0

它是否可以用更简单的例子工作?例如只需返回'ArrayList '?这只是一个调试建议,而不是“解决方案”。 – DavidS

回答

2

当使用选择组件(如p:selectCheckboxMenup:pickList)时,需要一个转换器来处理复杂的(不是简单的String)Java对象,其值为f:selectItems。 A转换器将序列化并反序列化您的实体Demonstrator

因此,你需要添加converter属性为您p:selectCheckboxMenu并引用自己的转换器,甚至更好,使用现成的使用由Omnifaces,一个伟大的工具库,用于JSF开发人员提供SelectItemsConvertershowcase link)(安装直截了当:添加.jar文件或在Maven中添加新的依赖项)。

<p:selectCheckboxMenu id="menu" value="#{nastavnik.odabraniDemonstratori}" converter="omnifaces.SelectItemsConverter" label="Demonstratori:" filter="true" filterMatchMode="startsWith" panelStyle="width:250px"> 
    <f:selectItems value="#{nastavnik.sviDemonstratori}" var="demons" itemLabel="#{demons.ime} #{demons.prezime}" itemValue="#{demons}" /> 
</p:selectCheckboxMenu> 

注:要了解更多有关设计自己的转换器(未走的路):

+0

马修并不是这种情况。您可以访问复杂对象的基本属性(字符串,整数等),而无需为复杂对象编写转换器。我刚刚在本地使用'p:dataList'测试了它,并且它按预期工作。 – DavidS

+0

这不是关于访问'p:dataList'中复杂对象的属性,而是关于设置这些对象(这实际上会显示在'p:dataList'组件中),这要归功于选择组件('p:selectCheckboxMenu') case) –

+0

这是一个很好的观点,Mathieu,但是OP发布的错误消息是抱怨“{d.ime}',这是他在p:selectCheckboxMenu之外使用的表达式。嗯,但我想缺乏转换器可能会造成这种情况,不是吗?如果默认转换器将其视为字符串,则可能缺少转换器导致此错误消息。 (我不能删除我的downvote,除非你编辑你的答案。) – DavidS

相关问题