2016-08-17 9 views
2

현재 환경은 JRE 1.7, JSF 2.2, Eclipse Luna입니다. 내 응용 프로그램의 특정 페이지 (entity_index.xhtml)에서 나는 다음 (PrimeFaces) 버튼이 있습니다매개 변수를 전달하는 다른보기로 이동

아이디어는 사용자가이를 클릭하고 현재의 엔티티에 대한 몇 가지 세부 사항에 표시됩니다 있도록 버튼을 제공하는 것입니다

<p:commandButton value="Details" action="entity_details" 
       ajax="false" onclick="this.form.target='_blank'"> 
    <f:param name="id" value="#{entity.id}" /> 
</p:commandButton> 
다른 브라우저 탭 (페이지 entity_details.xhtml). 이것은 많은 버튼 중 하나의 버튼이므로 entity_index.xhtml 페이지에는 세부 정보 버튼이있는 Entity의 인스턴스가 많이 표시됩니다.

이 버튼은 새 탭이 열리고 올바른 페이지 (entity_details.xhtml)가 표시되지만 엔티티 ID가 세부 정보 페이지 (EntityDetailsMB)를 처리하는 빈에 도달하지 않는다는 의미에서 작동합니다.

다음

인덱스 페이지에서 전송 매개 변수를 캡처하고 EntityDetailsMB,에 id 속성에 전달하기 위해 최선을 다하고 <f:metadata/> 요소가 있다고
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br" 
    template="/private/template/sbadmin.xhtml"> 
<f:metadata> 
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/> 
</f:metadata> 

<ui:define name="content"> 
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2> 
<h:form id="form"> 
... 
</ui:composition> 

공지가있는 곳에 다음과 같이 세부 사항 페이지입니다

public Entity getEntity() { 
    return entityById(id); 
} 

public Long getId() { 
    return id; 
} 

public void setId(Long value) { 
    id = value; 
} 

setId() 메서드는 호출되지 않으므로 getEntity()은 항상 null을 반환합니다.

작동하지 않으려면 뭔가요?

+0

은 당신이 결과를 확인하고 데이터를 얻을 수있는 PARAM를 추가하려고 않았다 처음 JSF 페이지 –

답변

4

p:commandButtonPOST 요청을 수행합니다. 당신은 단순히 -POST 서버에없는, 엔터티 세부 뷰를 GET 싶은, 그래서 당신은 h:link 필요 : URL을 처리 할 수있을 것 대상 페이지에서 다음

<h:link value="Details" outcome="entity_details" target="_blank"> 
    <f:param name="id" value="#{entity.id}" /> 
</h:link> 

f:viewParam을 매개 변수 :

<f:metadata> 
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/> 
    <f:viewAction action="#{entityDetailsMB.init}" /> 
</f:metadata> 

대신 게터에 그 일을 당신의 실체를 초기화하는 f:viewAction를 사용 which is discouraged :

public void init(){ 
    entity = entityById(id); 
} 

은 참조 :

+1

간결, 직접 , 더 나은, 정확! – AlexSC