2013-01-02 5 views
0

Mojarra 2.1.6 구현을 사용하여 JSF 응용 프로그램을 빌드하고 있습니다. 내 응용 프로그램 화면은 @ViewScoped이고 각 bean은 하나의보기에서 다른보기로 파기됩니다. 또한 탐색 모음이나 탐색 경로의 일종을 갖고 싶기 때문에 사용자는 페이지를 사용하여 다시 사용할 수 있습니다. 나는이 방법으로, Primefaces p:button 사용하고 있음을 달성하기ViewScoped bean의 상태 저장

<h:panelGroup 
     rendered="#{!navigationManager._DisableNavigationButtons}"> 
<p:toolbar> 
    <p:toolbarGroup> 
     <ui:repeat value="#{navigationManagerSystem._Navegables}" 
             var="item"> 
      <p:button value="#{item._Title}" outcome="#{item._IncludePath}"> 
       <f:param name="params" value="#{item._NavigationParams}" /> 
      </p:button> 
     </ui:repeat> 
     <p:button disabled="true" 
      value="#{navigationManagerSystem._Navegable._Title}" /> 
    </p:toolbarGroup> 
</p:toolbar> 

이 코드에서 볼 수 있듯이, 그것은 기본적으로 버튼이있는 툴바의이 버튼은 이전 URL의 저장, 그래서 때 사용자 그 중 하나를 클릭하면 돌아갈 수 있습니다.

하지만, 내 문제는 내가보기 매개 변수를 받고있는 일부 페이지가 나는 일반적인 뭔가하고 싶은, 그래서 좋은 생각이 java.util.List에 매개 변수를 저장하는 것입니다 위해 (navigationManagerSystem 것은 @SessionScoped 콩입니다) 사용자가 단추를 클릭하여 돌아가서 이전 빈 상태를 달성 할 때 복구 할 수 있습니다.

그러나 위의 예제는 작동하지 않는 경우는, 심지어 대상 페이지가

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:c="http://java.sun.com/jsp/jstl/core" 
xmlns:p="http://primefaces.org/ui" 
template="/templates/general_template.xhtml"> 

<ui:define name="metadata"> 
    <f:metadata> 
     <f:viewParam id="user" name="user" 
      value="#{navegableUserData._ParamUser}" required="true" 
      requiredMessage="User is required" /> 
     <f:viewParam id="params" name="params" 
      value="#{navegableUserData._NavigationParams}" /> 
     <f:event type="preRenderView" 
      listener="#{navegableUserData.initialize}" /> 
    </f:metadata> 
    <h:message for="user" /> 
</ui:define> 

<ui:define name="general_content"> 
    <p:outputPanel autoUpdate="false" id="Datos_Loged" name="Datos_Loged" 
     layout="block"> 
     <h:form id="SystemUserForm"> 
      <ui:include 
       src="/system/manage_user/content/edit_user/system_user_data/system_user.xhtml" /> 
     </h:form> 
    </p:outputPanel> 
</ui:define> 

_NavigationParams 세터가 호출되지 않는 그런 식으로 작성하고 난 변환 예외가있다. JSF에서이 작업을 수행하는 더 좋은 방법이 있는지 모르겠다. 어쩌면 @ViewScoped bean을 유지할 것이다.

+0

귀하의 버튼이 표시됩니까?, _NavigationParams가 문자열입니까? p : button에서 ajax = false를 시도 했습니까? –

+0

'_NavigationParams'는 Serializable NavigationParam 클래스의리스트입니다. 네비게이션 매개 변수가없는 페이지에 대한 제 버튼이 제대로 작동하고 있습니다. URL로 이동하면 콩이 제대로 초기화됩니다. 'p : commandButton'이 내가 아는 한'p : button'은 절대 아약스 모드로 가지 않습니다. –

답변

0

솔루션이 뷰를 통해 직접 매개 변수를 전달할 수 없다고 생각합니다. 단지 navigationManager bean 인 @SessionScoped에 호스트하고 버튼 대기열을 제어하십시오. 어쨌든, 내 @ViewScoped 콩에서 매개 변수를 복구하기 위해 클릭 한 단추를 알고 있어야합니다,보기를 통해 인덱스 값으로 충분하지 않을까요?

그런 식으로 클릭 한 다음에 단추를 제거하여 탐색 경로를 유지 관리 할 수도 있습니다.

어쨌든 다른 아이디어를 환영합니다.

+0

마침내 나는 세션에서 매개 변수를 저장하는 방법으로 그것을 달성했다. 범위. 질문의 제목이 변경되었습니다. –

0

f : viewParam, f : param은 GET 매개 변수의 설정, 변환 및 유효성 검증을 관리한다. 따라서 url은 newPage.jsf? param = 10과 같을 것입니다. get 매개 변수에 클래스 목록을 넣으려고하면 get 매개 변수가 문자열이어야하므로 오류가 발생합니다.

+0

이름 - 값 쌍을 포함하는 NavigationParam 인스턴스의 목록을 뷰의 GET 매개 변수에 어떻게 추가 할 수 있습니까? 나는 그들 중 얼마나 많은 사람들이 거기에 있는지 알지 못한다. 목적지 빈은 그것들 모두를 읽어야한다. 그래서 나는 목록에서 생각하고있다 ... –

관련 문제