В нашем текущем проекте мы хотим заменить <h:selectOneMenu>
на <p:autocomplete>
Primefaces.Выбранные элементы - это список Pojos (объектов JPA).Разница с приведенными примерами в простых лицах витрины заключается в том, что мы хотим, чтобы свойство первичного ключа (id) сущности было значением выбора, поэтому его можно легко передать в качестве параметра представления:
<f:metadata>
<f:viewParam name="playerId" value="#{playerPreRenderViewListener.searchCriteria.playerId}" />
<f:viewParam name="year" value="#{playerPreRenderViewListener.searchCriteria.year}" />
</f:metadata>
<h:form>
<h:inputText value="#{playerPreRenderViewListener.searchCriteria.year}"/>
<p:autoComplete var="player" itemLabel="#{player.name}" itemValue="#{player.id}"
completeMethod="#{playerBean.completePlayer}" forceSelection="true"
converter="#{playerConverter}"
value="#{playerPreRenderViewListener.searchCriteria.playerId}">
</p:autoComplete>
<h:commandButton value="Submit" action="showTeam?faces-redirect=true&includeViewParams=true" />
</h:form>
К сожалению, приведенный выше пример приведет к исключению PropertyNotFoundException:
itemLabel = "# {player.name}": свойство 'name' не найдено для типа java.lang.Long '
Проблема в том, что атрибут var
имеет тип Long
, а не Player
.При использовании простого <h:selectMenu>
он работает в сочетании с <f:selectItems>
:
<f:selectItems var="player" value="#{playerBean.listPlayers}" itemLabel="#{player.name}" itemValue="#{player.id}" />
Кто-нибудь знает, как решить эту проблему?