<p: selectManyMenu var> выдает ELException: класс 'java.lang.String' не имеет свойства 'foo'
Я пытаюсь реализовать начертания 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 ...>
работает отлично.
1 ответ
Это вызвано элементом-заполнителем, который имеет пустую строку в качестве значения.
<f:selectItem itemLabel="Select questions" itemValue="" />
Лучше явно сделать это #{null}
вместо пустой строки, поэтому он разрешает null
вместо java.lang.String
,
<f:selectItem itemLabel="Select questions" itemValue="#{null}" />
Он работал в <p:selectOneMenu>
потому что его рендерер просто отображает метку, когда значение элемента является экземпляромString
(который, в свою очередь, потерпит неудачу, если null
; это, в свою очередь, вероятно, упущение / ошибка в PrimeFaces).