2013-01-04 2 views
2

Mojarra 2.1.6 웹 응용 프로그램에 문제가 있습니다. @ViewScoped 관리 빈을 사용하여 개발 중이며 각 빈은 xhtml 페이지에 연결되어 있습니다. 이 페이지는 PARAMS 그 방법으로 콩을 초기화 한 후 일부 보기를 받고있다 : 당신이 볼 수 있듯이Scoped Bean preRenderView 메소드가 여러 번 호출되었습니다.

<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}" /> 

     <f:viewParam id="NavIndex" name="NavIndex" 
      value="#{navegableUserData._QueueIndex}" /> 
     <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"> 
       <ui:param name="manager" value="#{navegableUserData}" /> 
      </ui:include> 
     </h:form> 
    </p:outputPanel> 
</ui:define> 

, 내 페이지가 보이는 일반적인 템플릿에 중첩 된 : 나는 그런 Primefaces 테이블 필터링 등의 아약스 요청을 할 때

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<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" xmlns:o="http://omnifaces.org/ui"> 


<h:head> 
    <meta http-equiv="Pragma" CONTENT="no-cache"></meta> 
    <meta http-equiv="cache-control" content="no-cache"></meta> 
    <meta http-equiv="Expires" CONTENT="-1"></meta> 
    <meta http-equiv="Content-Type" 
     content="text/html; charset=ISO-8859-15" /> 
    <h:outputStylesheet library="css" name="prime_styles.css" /> 
    <h:outputScript library="js" name="prime_translations.js" /> 
</h:head> 

<h:body> 
    <ui:insert name="metadata" /> 
    <o:importConstants 
     type="com.company.system.view.beans.NavigationResults" /> 

<!-- More stuff --> 

문제가 온다. 내 백업 bean이 다시 작성되지는 않지만 <f:event type="preRenderView" listener="#{navegableUserData.initialize}" />이 다시 호출됩니다.

뷰 매개 변수를 기반으로 데이터를로드하고 있으며 페이지가 처음 렌더링 될 때만 실행하는 방법이 필요합니다. 나는 태그를 사용하여 매우 조심스러워했으며 일반 템플릿에서만 사용했고 뷰 빈 속성은 태그에 연결되어 있지 않기 때문에 문제가 아닌 것으로 생각합니다. 또한 모든 페이지에서이 문제가 발생하므로 특정 백킹 빈의 문제가 아닌 것으로 생각합니다. 이 아약스 요청시에만 발생하는 경우

+0

당신이 있습니까 아약스 사용? – SJuan76

+0

primefaces의 버전은 무엇입니까? 문제가있을 수 있습니다. 최신 버전인지 확인하십시오. 또한 Mojarra 2.1.14 (2.1.15/16로 업그레이드해야합니다. Primeface와 함께 문제가있어서 추천하지 않는 이유입니다.) 이미이 버그로 인한 것임을 배제해야합니다. 결정된. – Gimby

+0

Prime 3.4.2 및 Mojarra 2.1.14를 사용해 보았지만 여전히 동일한 문제가 있습니다. Ajax 요청은 특별히 자체적으로 수행되는 것이 아니라 PF dataTable 필터에 의해 수행됩니다. –

답변

1

그냥 완전성, 분리 방법에서 @ JSF 2.2를 사용하는 경우 더 깨끗한 선택이 있습니다. f:event 대신 f:viewAction을 사용하십시오. 그와

<f:viewAction action="#{navegableUserData.initialize}" /> 

, 그것은 기본적으로 방법 자체가 호출되지 않기 때문에 기본적으로이 조치가 포스트 백에서 실행되지 않기 때문에, if (!FacesContext.getCurrentInstance().isPostback())와 서버 코드를 포장 할 필요는 없습니다.

당신은 양자 택일 원래 f:event를 사용하는 것과 같은 동작 될 것이라고, 수를 설정할 수 있습니다

<f:viewAction action="#{navegableUserData.initialize}" onPostback="true" /> 

항목 :

관련 문제