2013-06-04 5 views
0

내 xhtml에는 숫자 또는 알파벳 값을 입력 할 수있는 입력 필드가 있습니다. 아약스 호출을 사용하여 입력 값의 유효성을 검사하고에 대한 유효성 검사 오류를 던지고 있습니다. 그러나 잘못된 문자와 오류 메시지를 입력 한 후에도 사용자는 여전히 '저장'버튼을 누를 수 있습니다. 사용자가 저장 버튼을 누르면 컨트롤러에 메소드가 트리거됩니다. FacesContext.getCurrentInstance()를 사용하여 컨트롤러 내부의 p : 메시지에서 유효성 검사 오류를 검사 할 수있는 방법이 있습니까?FacesContext를 사용하여 유효성 검사 오류 메시지를 가져 오는 방법은 무엇입니까?

XHTML 코드

<!-- Messages -->  

    <p:messages id="errorMessages" globalOnly="false" showDetail="true" showSummary="false" closable="true" /> 
<!-- Column input field--> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputText value="Input Amount" escape="false" /> 
     </f:facet> 
     <p:cellEditor> 

      <f:facet name="output"> 
       <h:outputText value="#{row.amount}" escape="false"> 
        <f:convertNumber maxFractionDigits="3" minFractionDigits="3" 
         maxIntegerDigits="5" /> 
       </h:outputText> 
      </f:facet> 
      <f:facet name="input"> 
       <p:inputText id="input" value="#{row.amount}" maxlength="10" 
        size="10"> 
        <f:convertNumber maxFractionDigits="3" minFractionDigits="3" 
         maxIntegerDigits="5" /> 
        <f:validator validatorId="hourlyValueValidator" for="input" /> 
        <p:ajax event="change" partialSubmit="true" process="input" 
         update=":#{p:component('errorMessages')}" /> 
       </p:inputText> 
      </f:facet> 
     </p:cellEditor> 
    </p:column> 


<!-- Save Button --> 

    <p:commandButton id="btnSubmit" value="Save"   
    update=":#{p:component('tblScrollPnl')} :#{p:component('errorMessages')}" 
    action="#{controller.saveValues()}" ajax="true" /> 

컨트롤러 ViewScope에서

public void saveValues() throws Exception { 

    FacesContext context = FacesContext.getCurrentInstance(); 
    List<FacesMessage> errorMsgList = context.getMessageList("globalMessages"); 
    ...... 
    ...... 
    ...... 
    } 

답변

1

당신이보기 측 유효성 검사가 발생, 경험하지만,하지 않는 한 당신은, 검증을 위해 콩 측에서 메시지를받을 필요가 없습니다 당신의 행동을 막아라.

일이 잘못의 부부가보기에이, 당신의 문제를 해결하기 위해 당신은 버튼을 기본 process="@this"에 의해 (처리되므로 유효성 검사가 생략 된 경우에만 ortherwise, 당신의 p:commandButtonprocess 속성을 변경해야합니다.

<p:commandButton id="btnSubmit" value="Save" process="@form" update=":tblScrollPnl :errorMessages" action="#{controller.saveValues()}" /> 

또한 내가 update=""에 큰 문제는 기본적으로이기 때문에 ajax="true"을 제거하고 고정 된 적이 있습니다 당신은 또한 당신의 유효성 검사기 재 배열한다

:.

<p:inputText id="input" value="#{row.amount}" maxlength="10" size="10" validator="hourlyValueValidator"> 
    <f:convertNumber maxFractionDigits="3" minFractionDigits="3" maxIntegerDigits="5" /> 
</p:inputText> 
+0

제안 해 주셔서 감사합니다. 변경되었습니다. 정지 페이지가 잘못된 문자로 제출됩니다. 내 datatable 열에서 cellEditor를 사용합니다. 아마도 사용자가 버튼 페이지를 전송할 때 입력 필드의 유효성을 검사하지 못하게 할 수 있습니다. – Sabarish

+0

대답이 업데이트되었습니다. 작동해야합니다! –

+0

@Saba 지금 작동합니까? –

관련 문제