2012-03-09 2 views
3

현재 프로젝트에서 <h:selectOneMenu>을 Primefaces의 <p:autocomplete>으로 바꿉니다. 선택 항목은 Pojos (JPA Entities) 목록입니다. primefaces showcases에 주어진 실시 예에 대한 차이점은 선택 값 엔티티의 기본 키 특성 (ID)를 원하는 것을이므로 쉽게보기 PARAM로 전달 될 수POWO리스트와 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으로 이어질 것 재산권 '이름'형식 java.lang.Long의 '

또한, p를 찾을 수 없습니다 예를 들어 var 특성이 Long이고 Player이 아닌 경우입니다. <h:selectMenu> 간단한을 사용하는 경우는 <f:selectItems>과 함께 작동 :

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

사람이이 문제를 처리하는 방법을 알고 있나요?

+0

플레이어 변환기의 코드 스 니펫을 제공 할 수 있습니까? 나는 같은 문제에 빠져서 이것을 위해 컨버터를 사용하고 싶다. – CSchulz

답변

2

당신은 현재 활성화 된 playerId에 속하는 선수를 반환하는 백업 빈 메소드를 추가 할 수 있으며,이 currentPlayer 당신의 백업 빈의 값 속성으로 설정 :

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,하지만 이것은 뷰 매개 변수에 대한 getter 및 setter가 있고 autocomplete에 대한 getter 및 setter가 있음을 의미합니다. Plus - 각 preRenderView에서 viewparam으로 주어진 id에 대한 플레이어 객체를 조회해야합니다. 거기에 우리가 h : selectOneMenu를 가지고있는 것처럼 간단한 방법이 없습니까? 위의 예에서 – fischermatte

+0

은'itemValue = "# {player}"''id가없는 것 같은가요? – fischermatte

+0

예, 저의 실수입니다. 나는 그것을 바로 잡았습니다. –

관련 문제