我正在尝试在高级模式下实现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 ...>
时,它的效果非常好。
答案 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的疏忽/错误。)