2012-03-09 3 views
3

現在のプロジェクトでは<h:selectOneMenu>をPrimefacesの<p:autocomplete>に置き換えたいと考えています。選択項目は、Pojos(JPA Entities)のリストです。 primefaces showcasesで与えられた例との違いは、私たちが選択値としてエンティティの主キーのプロパティ(id)をしたいということであり、それは簡単にビューのparamとして渡すことができます。PrimefacesオートコンプリートをPOJOリストとPOJOのプロパティで選択値として使用する方法

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

残念なことに例

ITEMLABEL = "#{player.name}":上記PropertyNotFoundExceptionにつながるプロパティ 'name' はタイプがjava.lang.Long」

P上に見つかりませんvar属性のタイプがLongであり、Playerではないという問題があります。それは<f:selectItems>と連携して動作し、簡単な<h:selectMenu>を使用する場合:

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

誰がこの問題に対処する方法を知っていますか?

+0

プレーヤーのコンバーターのコードスニペットを提供できますか?私は同じ問題に遭遇し、これのためにコンバータを使用したい。 – CSchulz

答えて

2

あなたは、現在アクティブなplayerIdに所属する選手を戻すバッキングBeanのメソッドを追加することができますし、このcurrentPlayerあなたのバッキングBeanのvalue属性として設定します。

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

とビューで:

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

thxですが、これはビューパーマネントに対して1つのゲッターとセッターを持ち、オートコンプリートのために別のゲッターとセッターを持つことを意味します。 Plus - 各preRenderViewで、viewparamとして与えられたIDのプレーヤーオブジェクトを検索する必要があります。私たちはh:selectOneMenuでそれを持っていたので、簡単な方法はありませんか?上記の例の – fischermatte

+0

は、 'itemValue ="#{player} "'私は(idなし)と思いますか? – fischermatte

+0

はい、私の間違い、私はそれを修正しました。 –

関連する問題