2012-03-20 2 views
1

Primefaces 3.0을 사용하고 있습니다.onRowSelect에서 다른 페이지로 이동하는 방법

<p:dataTable id="paySumm" var="PSummRow" 
value="#{beanPySummary.PySummariesModel}" 
selection="#{beanPySummary.selectedPySummary}" selectionMode="single" paginator="true" 
rows="15" paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} 
{CurrentPageReport} {NextPageLink}" rowsPerPageTemplate="10,15,25,35" > 

<p:ajax event="rowSelect" listener="#{beanPySummary.onRowSelect}" /> 

나는 방법 onRowSelect의 일부 비즈니스 로직을 한 후 나는 다른 페이지로 이동 : 아래 그림과 같이 나는 하나의 selectionMode와 데이터 테이블이있다.

public String onRowSelect(SelectEvent event) { 
    ...... 
    ConfigurableNavigationHandler configurableNavigationHandler = 
    getCurrentInstance().getApplication().getNavigationHandler(); 
    configurableNavigationHandler.performNavigation("MoreDetail?faces-redirect=true 
    return ""; 

필자는 includeViewParam을 사용하여 MoreDeatils에 매개 변수로 전달하고자하는 데이터가 있습니다. MoreDeatils.xhtml에서 ViewParam을 f로 정의 할 수 있습니다. ManagedProperty 주석을 사용해야하고 동시에 해당 datams 페이지의 숨겨진 필드로 해당 매개 변수를 정의해야하는지 잘 모르겠습니다. 여기에 조언과 지시가 필요합니다.

덕분에, 피터

답변

1

당신은 ExternalContext#redirect()로 리디렉션을 보낼 수 있습니다. 보내려는 데이터는 URL의 쿼리 문자열에 설정해야합니다.

public void onRowSelect(SelectEvent event) throws IOException { 
    String field1 = URLEncoder.encode(this.field1, "UTF-8"); 
    String field2 = URLEncoder.encode(this.field2, "UTF-8"); 
    String field3 = URLEncoder.encode(this.field3, "UTF-8"); 
    String url = "MoreDetail.xhtml?field1=" + field1 + "&field2=" + field2 + "&field3=" + field3; 
    FacesContext.getCurrentInstance().getExternalContext().redirect(url); 
} 

(ajax) 액션 리스너 메소드는 void을 반환합니다.

+0

감사합니다. BalucsC. 당신은 내 질문에 답하는 것이 아니라 고통을 받고 다른 사람들을 돕는 것에 대한 대단한 사람입니다. 예, onRowSelect 메서드에서 void가 발생했지만 생성자를 두 번 호출하는 것으로 나타났습니다. 그래서 String을 반환 매개 변수로 추가하고 그런 식으로 행동을 멈췄습니다. 나는 왜 그것이 몸을 굽혔는지 잘 모르겠다. 왜 나는 디버그 모드에서 obsereved를 두 번 호출했는지 확신 할 수 없다. 나는 당신이 설명 할 수 있다고 확신합니다. 정말 고맙습니다. – Peter

+0

안녕 BalusC, 내 무지와 함께 곰. 나는 주석으로 코드를 어떻게 보내야할지 모르겠다. 그래서 나는 여기서 설명하려고 노력하고있다. onRowSelect 메소드에있는 모든 것이 잘 작동합니다. 단, 해당 페이지를로드하는 대신 MoreDetails에 대한 파일 다운로드 다이얼 우드 상자가 열립니다. 원하는 경우 새 게시물 아래에 내 코드를 게시 할 수 있습니다. 또한, 아직도 내 MoreDeatl xhtml에서 f ViewParm이 필요합니까? 감사. – Peter

+0

내 대답의 예제는'* .xhtml'의 URL 패턴에'FacesServlet'을 매핑했다고 가정합니다. '* .jsf'와 같은 다른 URL 패턴에 매핑했다면 리다이렉트 URL을 적절하게 변경해야합니다. 예 : 'MoreDetail.xhtml' 대신에'MoreDetai.jsf'를 사용하십시오 (또는 URL 패턴을'* .xhtml'으로 변경하여 가상 URL을 사용하지 않아도됩니다). – BalusC

관련 문제