<p:selectmanymenu var =“”>抛出ELException:类&#39; java.lang.String&#39;没有财产&#39; foo&#39;

时间:2015-07-06 08:09:56

标签: jsf jsf-2 primefaces selectmanymenu

我正在尝试在高级模式下实现primefaces selectManyMenu,如展示所示,但无法使其正常工作。

但它适用于selectOneMenu

这是我的selectOneMenu代码:

<p:selectOneMenu id="param" value="#{containerResultBean.selectedParam}"
                 converter="omnifaces.SelectItemsConverter" var="pa"
                 filter="true" filterMatchMode="contains" >
      <f:selectItem itemLabel="Select questions" itemValue="" />
      <f:selectItems value="#{containerResultBean.paramList}"
                     var="parameter" itemLabel="#{parameter.name}"
                     itemValue="#{parameter}"/>
      <p:column >
           <h:outputText styleClass="mediumFont" value="#{pa.name}"/>
           <h:outputText styleClass="mediumFont" value="#{pa.category.name}"/>
      </p:column>
</p:selectOneMenu>

for selectManyMenu

<p:selectManyMenu id="param" value="#{containerResultBean.selectedParamsList}"
                 converter="omnifaces.SelectItemsConverter" var="pa"
                 filter="true" filterMatchMode="contains" >
      <f:selectItem itemLabel="Select questions" itemValue="" />
      <f:selectItems value="#{containerResultBean.paramList}"
                     var="parameter" itemLabel="#{parameter.name}"
                     itemValue="#{parameter}"/>
      <p:column >
           <h:outputText styleClass="mediumFont" value="#{pa.name}"/>
           <h:outputText styleClass="mediumFont" value="#{pa.category.name}"/>
      </p:column>
</p:selectManyMenu>

我收到错误value="#{pa.name}": The class 'java.lang.String' does not have the property 'name'.

我已经加倍检查,我的equal()hashcode()toString()方法。我认为如果这些方法存在问题,那么selectOneMenu也不应该有效。

请注意,当我删除var='pa'<column ...>时,它的效果非常好。

1 个答案:

答案 0 :(得分:2)

它是由占位符项引起的,其中有一个空字符串作为值。

<f:selectItem itemLabel="Select questions" itemValue="" />

最好明确地将其设为#{null}而不是空字符串,以便它解析为null而不是java.lang.String

<f:selectItem itemLabel="Select questions" itemValue="#{null}" />

它在<p:selectOneMenu>中有效,因为它的渲染器只是在项值为instance of String时呈现标签(如果它实际上是null则会失败;这反过来又是可能是PrimeFaces的疏忽/错误。)

另见: