3

만료 후 나는 my.page.com/table.xhtml?id=123 같은 아래의 URL로 설정이있는 페이지가 있습니다. 모든 작업은 AJAX을 사용하여 데이터 테이블을 다시로드합니다.복원 요청 매개 변수 세션이

id이 throught를로드 :

<f:metadata> 
    <o:viewParam name="id" value="#{dataTable.id}" /> 
    <f:viewAction action="#{dataTable.initialize}" /> 
</f:metadata> 

이 모두 잘 작동을, 세션이 만료 될 때까지. 이 시점에서 아무 것도 작동하지 않습니다. 문제의 id에 더 이상 액세스 할 수 없기 때문에 데이터를 가져올 수 없으며 데이터를 가져 오는 DAO 클래스에 대한 호출에이 데이터가 없습니다.

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id") 

반환 null : "더 이상 id에 액세스 할 수 없습니다"으로

나는 것을 의미한다. 또한, f:metadatao:viewParam를 통해로드 내 백업 콩에서 int id가 (. 나는 ViewExpiredException를 잡을 수있는 방법이 알고

을 같은 운명을 겪고 있지만, 내가 원하는 것이 아니다. 나는 페이지가 필요합니다 단순히 알고있는 사용자없이 (이 경우 id에) 요청 매개 변수를 사용하여 모든 값을 다시로드합니다.

을 나는 @ViewScoped이 복잡한 테이블과 모든 매개 변수를 제어 할 수 빈을 관리해야합니다 (I 생각) 등

를 내가 이 점에 관해서는 잃어 버렸습니다. 나는 내 자신의 빌드를 시도했다 ViewHandler 단순히 페이지를 다시 작성 (새로 고침)하고 다른 솔루션 중 PrimeFacesajaxExceptionHandler을 사용하려고했습니다. 그러나 이것들은 모두 오류가 발생하고 그것을 표시합니다. 백킹 빈에서 내 요청 매개 변수 my.page.com/table.xhtml?id=123에 액세스하고 싶습니다.

도움을 주시면 감사하겠습니다.

I가 실행하고 있습니다 :

  • 톰캣 7
  • 인 Mojarra 2.2.6
  • Omnifaces 1.8.1
  • Primefaces 5.0
+0

는 "더 이상 문제의 ID에 액세스 할 수 없습니다"란 무엇을 의미합니까 코드를 추가하지 않고 해결 될 것인가? – EJP

+0

@EJP는 귀하가 가진 질문과 관련하여 더 자세한 내용으로 질문을 업데이트했습니다. – blo0p3r

+0

Ajax 호출로 인해 발생합니다. 세션 만료는 요청 매개 변수와 아무 관련이 없습니다. 뷰에 저장하거나 c :가 설정된 빈에 저장하십시오. – EJP

답변

3

단지 완전히 다시 만들어 만료 된 뷰를 우회에 관해서는, 메타 데이터에 <o:enableRestorableView>을 추가

<f:metadata> 
    ... 
    <o:enableRestorableView /> 
</f:metadata> 

을 요청 매개 변수를 유지에 관해서는, 중 하나는 일반 HTML 숨겨진 입력 필드를 추가 형태 :와

<h:form> 
    ... 
    <input type="hidden" name="id" value="#{dataTable.id}" /> 
</h:form> 

또는 사용 , includeRequestParams="true" 또는 useRequestURI="true"으로, 모든 뷰 매개 변수와 함께 JSF 뷰 ID에 제출할 것인지 아니면 전체 요청 쿼리 문자열을 사용하는 JSF 뷰 ID로 보낼지 또는 전체 요청 URI (쿼리 문자열 포함)에 따라 달라지는 지 여부에 따라 다릅니다.

<o:form includeViewParams="true"> 
    ... 
</o:form> 

는 JSF 라이프 사이클의 모든 단계를 통과하기 전에 다시 게시에 Bean의 상태를 다시 초기화에 관해서는, 수동으로 잡아하여 <o:viewParam>를 교체해야하고 <f:viewAction>@PostConstruct에 의한 것 :

@PostConstruct 
public void initialize() { 
    id = Faces.getRequestParameter("id"); 
    // ... 
} 
+0

위와 같이하고 호출기에서 'commandLink'를 클릭하면 오류가 숨겨지고 페이지가 표시되지만 모든 데이터가 손실됩니다. 데이터는 새로 고침되지 않고'actionListener'는 절대 호출되지 않습니다. 나는 결국 모든 데이터를 잃어 버리게된다. 기본적으로'update'd가 무엇인가. – blo0p3r

+0

답변 업데이트를 참조하십시오. – BalusC

+0

업데이트를하면 올바른 방향으로 나를 안내합니다. 완료해야 할 몇 가지 추가 작업이 있지만 내 구체적인 작업을 수행 할 수있는 기능/논리가 있습니다. 고맙습니다! – blo0p3r

0

나는 위의 모든 것을 시도했고 mojar에서 일하지 않았다. 라 2.2.5

그냥 인 Mojarra 2.2.8에 mojara을 변경하고는