<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).

Смотрите также:

Другие вопросы по тегам