【发布时间】:2012-03-27 01:46:52
【问题描述】:
在我们当前的项目中,我们希望将 <h:selectOneMenu> 替换为 Primefaces 的 <p:autocomplete>。选择的项目是 Pojos(JPA 实体)的列表。与 primefaces showcases 中给定示例的不同之处在于,我们希望实体的主键属性(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}":在 java.lang.Long 类型上找不到属性“名称”
问题在于var 属性的类型是Long 而不是Player。当使用简单的<h:selectMenu> 时,它与<f:selectItems> 一起使用:
<f:selectItems var="player" value="#{playerBean.listPlayers}" itemLabel="#{player.name}" itemValue="#{player.id}" />
有人知道如何处理这个问题吗?
【问题讨论】:
-
你能提供你的播放器转换器的代码sn-p吗?我遇到了同样的问题,想为此使用转换器。
标签: jsf-2 autocomplete primefaces