<p:selectManyMenu var> 抛出 ELException: class 'java.lang.String' 没有 属性 'foo'
<p:selectManyMenu var> throws ELException: The class 'java.lang.String' does not have the property 'foo'
我正尝试在高级模式下实现 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>
对于 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 ...>
时,它工作得很好。
这是由占位符项目引起的,该项目的值为空字符串。
<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 中的 oversight/bug。
另请参阅:
- Best way to add a "nothing selected" option to a selectOneMenu in JSF
我正尝试在高级模式下实现 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>
对于 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 ...>
时,它工作得很好。
这是由占位符项目引起的,该项目的值为空字符串。
<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 中的 oversight/bug。
另请参阅:
- Best way to add a "nothing selected" option to a selectOneMenu in JSF