Jsf <;p:selectmanymenuvar>;抛出ELException:类';java.lang.String';没有属性';foo';
我正试图在showcase中所示的高级模式下实现primefacesJsf <;p:selectmanymenuvar>;抛出ELException:类';java.lang.String';没有属性';foo';,jsf,jsf-2,primefaces,selectmanymenu,Jsf,Jsf 2,Primefaces,Selectmanymenu,我正试图在showcase中所示的高级模式下实现primefacesselectManyMenu,但无法正常工作 不过,它在selectOneMenu上非常有效 以下是我的SelectOne功能表代码: <p:selectOneMenu id="param" value="#{containerResultBean.selectedParam}" converter="omnifaces.SelectItemsConverter" var="pa"
selectManyMenu
,但无法正常工作
不过,它在selectOneMenu
上非常有效
以下是我的SelectOne功能表代码:
<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}”:类“java.lang.String”没有属性“name”。
我已经双重检查了我的equal()
,hashcode()
和toString()
方法。我认为如果这些方法有问题,那么selectOneMenu
也不应该起作用
请注意,当我删除
var='pa'
和
时,它工作正常。这是由占位符项引起的,占位符项的值为空字符串
<f:selectItem itemLabel="Select questions" itemValue="" />
它在
中工作,因为当项目值为时,它的渲染器只是简单地呈现标签(如果它实际上为null
,则会失败;这反过来可能是PrimeFaces中的疏忽/错误)
另见:
containerResultBean.selectedParamsList
列表对象吗?似乎将pa
视为一个字符串对象。@Miguel是的,selectedParamsList是一个列表对象<代码>私有列表selectedParamsList=new ArrayList()代码>@Miguel我不明白为什么它在ManyMenu中被当作字符串对象,而不是在OneMenu中?@Miguel谢谢,但Omnifaces converter使用的是类的toString方法,类似于他自己实现的方法。转换器只是将实体对象转换为字符串,然后从字符串转换回实体。因此,如果转换器出现问题,OneMenu也不应工作。这就是我对转换器的理解。此外,转换器仅适用于
,而不适用于自定义表示。感谢它的工作,但为什么中的空字符串会导致ManyMenu出现问题而不是OneMenu出现问题?我只是查看了它的源代码并更新了答案。明白了为什么它会在OneMenu中工作。但是如果它的为null
,它会失败是什么意思?什么是空的?
如果在其中使用了itemValue=“#{null}”
,将显示一个空的自定义项。
<f:selectItem itemLabel="Select questions" itemValue="#{null}" />