2

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

它非常适合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>

对于 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'and时<column ...>,它可以完美运行。

4

1 回答 1

2

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

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

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

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

它在 中起作用<p:selectOneMenu>,因为它的渲染器只是在项目值是一个实例String时渲染标签(如果它实际上是,这反过来会失败null;这又可能是 PrimeFaces 中的疏忽/错误)。

也可以看看:

于 2015-07-06T12:51:42.297 回答