2014-11-04 2 views
1

얼굴 컨텍스트를 사용하여 페이지를 새로 고치는 동안 NPE를 얻는 이상한 행동이 있습니다. 관리되는 bean이 요청 범위에 있습니다. 그래서 commandbutton을 클릭 한 후 페이지를 새로 고침하고 싶습니다. 나는 '업데이트'를 시도했지만 내 페이지에서 이상하게 작동합니다. 오류 : PartialViewContextImpl $ PhaseAwareVisitCallback.visit : java.lang.NullPointerException이FacesContext를 통해 부분 렌더링하는 동안 NullPointerException 받기

이 내 JSF 페이지입니다 : 내가 페이지를 새로 고침 할 임시 보관함에 저장을 클릭하면 다음

<h:form id="form"> 
       <p:messages autoUpdate="true"/> 
       <h:panelGrid columns="4" cellpadding="5" id="panelGrid" rendered="true"> 
        <p:outputLabel for="s00" value="#{tk.expense_keyword}"/> 
        <p:inputText id="s00" value="#{expense.form.keyword}"/> 
        <p:outputLabel for="s02" value="#{tk.expense_creatorId}"/> 
        <p:inputText id="s02" value="#{expense.form.creatorId}" disabled="#{!expense.form.canEditCreatorId}"/> 
        <h:outputText id="s10" value="Amount Between #{expense.form.amountFrom} and #{expense.form.amountTo}" /> 
        <h:panelGrid> 
         <p:slider for="s11,s12" display="s10" minValue="0" maxValue="1000" style="width: 200px" range="true" displayTemplate="Amount Between {min} and {max}" /> 
         <h:inputHidden id="s11" value="#{expense.form.amountFrom}" /> 
         <h:inputHidden id="s12" value="#{expense.form.amountTo}" /> 
        </h:panelGrid> 
       </h:panelGrid> 
       <p:commandButton value="#{tk.expense_search}" id="a01" action="#{expense.search}" ajax="false" immediate="true"/> 

       <p:dataTable var="line" varStatus="loop" value="#{expense.form.expenseEntryList}" emptyMessage="#{tk.expense_table_empty}" id="dataTable"> 
        <p:column headerText="#{tk.expense_table_creatorId}"> 
         <h:inputHidden value="#{line.oid}"/> 
         <h:inputText value="#{line.creatorId}"/> 
        </p:column> 
        <f:facet name="footer"> 
         <p:commandButton value="#{tk.expense_saveAsDraft}" id="a06" action="#{expense.saveAsDraft}"/> 
         <p:commandButton value="#{tk.expense_submit}" id="a07" action="#{expense.submitAll}"/> 
         <p:commandButton value="#{tk.expense_validate}" id="a08" action="#{expense.validate}"/> 
        </f:facet> 
       </p:dataTable> 

      </h:form> 

. 그래서 FacesContext의 메소드를 사용하여 페이지를 새로 고침합니다. 이 요청 범위에 panelGrid :(당신이 콩이 모든

+0

전체 스택 추적을 여기에 게시하십시오. 원본 스택을 실제로 인쇄하지 않는 방법을 알아 차릴 수는 없습니다. 인종, 그러나 예외를 다시 던지기. 또한 패널 격자 내의 내용을 최소화하고 특별한'render = "true"'를 제거하여 포커스를 좁혀 야합니다. – kolossus

답변

0

먼저 데이터 테이블 새로 고침 작동하지만 왜

public Outcome saveAsDraft() throws Exception{ 

     try { 
      saveAsDraftBody(false,false); 
      getFacesContext().getPartialViewContext().getRenderIds().add("form:panelGrid");**//**getting error**** 
      getFacesContext().getPartialViewContext().getRenderIds().add("form:dataTable");**//**works fine**** 
      Log.info(this,"getFacesContext().getPartialViewContext().getRenderIds(): "+getFacesContext().getPartialViewContext().getRenderIds()); 
      return Outcome.SUCCESS; 
     } 
     catch (Throwable e){ 
      throw manageError(e); 
     } 

    } 

나도 몰라 당신은하고 있습니다 : 여기 내 방법 saveAsDraft입니다 전체 페이지 제출 및 여기 부분 렌더링은 이해가되지 않습니다. 기본적으로 구성 요소가 있기 때문에 얻는 오류, 양식을 제출할 때 현재보기의 관리 빈에 보낼 양식에 대한 다른 입력.

관련 문제