PrimeFaces p:dataList发出错误“在类型java.lang.String上找不到属性'ime'”

时间:2015-06-04 18:16:47

标签: jsf primefaces datalist

我想制作Checkbox菜单并在dataList中显示数据。这是我的xhtml:

<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 bean的重要代码:

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


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

Demonstrator bean具有属性ime。一切都很好,但当我尝试使用#{d.ime}在dataList中显示数据时,我收到此错误:

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

d属性是类型Demonstrator而不是String。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

使用选择组件(例如p:selectCheckboxMenup:pickList)时,需要一个转换器来处理复杂(=非简单字符串)Java对象作为f:selectItems的值。转换器将序列化和反序列化您的实体Demonstrator

因此,您需要为converter添加p:selectCheckboxMenu属性并引用自己的转换器,甚至更好,使用现成的SelectItemsConvertershowcase link )由Omnifaces提供,一个适用于JSF开发人员的优秀实用程序库(安装非常简单:添加.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>

注意:要了解有关设计自己的转换器的更多信息(不是要去的方式):