jsf-2 - 如何将 Primefaces 自动完成与 POJO 列表和 POJO 的属性用作选择值

标签 jsf-2 autocomplete primefaces

在我们当前的项目中,我们想要替换一个 <h:selectOneMenu>与 Primefaces 的 <p:autocomplete> .选择的项目是 Pojos(JPA 实体)的列表。与 primefaces 中给定示例的区别 showcases也就是说,我们希望实体的主键属性 (id) 作为选择值,因此它可以很容易地作为 View 参数传递:

<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&amp;includeViewParams=true" />
</h:form>

不幸的是,上面的示例将导致 PropertyNotFoundException:

itemLabel="#{player.name}": Property 'name' not found on type java.lang.Long'

问题是 var属性的类型为 Long而不是 Player .使用简单的 <h:selectMenu> 时它与 <f:selectItems> 结合使用:

<f:selectItems var="player" value="#{playerBean.listPlayers}" itemLabel="#{player.name}" itemValue="#{player.id}" />

有人知道如何处理这个问题吗?

最佳答案

您可以添加一个返回属于当前事件 playerId 的玩家的辅助 bean 方法,并将此 currentPlayer 设置为您的辅助 bean 的值属性:

public Player getCurrentPlayer() {
  // find player by playerId and return
}

在 View 中:

<p:autoComplete var="player" itemLabel="#{player.name}" itemValue="#{player}"
        completeMethod="#{playerBean.completePlayer}" forceSelection="true"
        converter="#{playerConverter}" 
        value="#{playerPreRenderViewListener.currentPlayer}">

关于jsf-2 - 如何将 Primefaces 自动完成与 POJO 列表和 POJO 的属性用作选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636942/

相关文章:

docker - 使 PowerShell 推荐像 Linux-bash(例如 docker)

jsf-2 - Primefaces DataTable、延迟加载和每行命令按钮

java - 错误java.lang.NullPointerException

jsf - 阻止 RichFaces 的 Web 过滤器

jsf - dataTable 不要在托管 Bean 中设置值

jsf - 页面加载后加载面板内容

javascript - 日期选择器无法处理我的 jsf 和 xhtml 文件,任何人都可以指导我吗

java - 无法让 JSR303 注释与 Tomcat 7 一起使用

javascript - 如何提高 Jquery 自动完成的性能

php - 在 Laravel 中关闭自动完成