/ / <p: selectManyMenu var> lanza ELException: La clase 'java.lang.String' no tiene la propiedad 'foo' - jsf, jsf-2, primefaces, selectmanymenu

<p: selectManyMenu var> lanza ELException: La clase 'java.lang.String' no tiene la propiedad 'foo' - jsf, jsf-2, primefaces, selectmanymenu

Estoy tratando de implementar primefaces selectManyMenu en modo avanzado, como se muestra en el escaparate, sin embargo, no puede hacerlo funcionar.

Funciona perfectamente para selectOneMenu aunque.

Aquí está mi código para 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>

para 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>

Estoy recibiendo un error value="#{pa.name}": The class "java.lang.String" does not have the property "name".

Me he duplicado, mi equal(), hashcode() y toString() metodos Creo que si hay problema con estos métodos entonces selectOneMenu Tampoco debería haber trabajado.

Tenga en cuenta, cuando elimino el var="pa" y <column ...>, funciona perfectamente.

Respuestas

2 para la respuesta № 1

Es causado por el elemento de marcador de posición que tiene una cadena vacía como valor.

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

Mejor hacerlo explícitamente. #{null} en lugar de una cadena vacía por lo que se resuelve a null en lugar de java.lang.String.

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

Funcionó en <p:selectOneMenu>, porque su renderizador simplemente representa la etiqueta cuando el valor del elemento es un en vez de String (lo que a su vez fallaría si es en realidad null; esto a su vez es probable que sea un descuido / error en PrimeFaces).

Ver también: