2013-10-11 8 views
0

아래 코드에서 볼 수 있듯이 입력 필드와 저장 버튼이있는 jsf 양식이 있습니다. 내가 원하는 것은 저장 버튼을 클릭 할 때 입력이 정규식 패턴으로 검증되어야한다는 것입니다. 유효성 검사가 실패하면 저장 확인 대화 상자가 표시되지 않아야합니다. 그렇지 않으면 저장 확인 대화 상자가 표시되고 저장 여부를 사용자에게 선택하게합니다.<p : commandButton 조건부 onclick 이벤트

조건부 onclick = "if (# {conditionOK})에도 불구하고 대화 상자가 항상 표시되었습니다 .contactOK가 false를 반환 할 때 확인 대화 상자가 표시되지 않겠습니까 !!! 많은 시도 후에, 나는 facescontext.isValidateFailed()가 다시 evalutated되지 않을 것이라 생각합니다.

:(

도와주세요 모든 내가 원하는, 만 확인, 정규식 - 검사기가 true를 돌려주는 경우.이 경우를 들어, 확인 대화 상자가 나타나야합니다.

내 접근 방식이 잘못되었을 수 있습니다. 다른 솔루션을 가지고 계신다면 많은 사람들에게 감사드립니다.

<h:form id="save_all_form"> 
     <p:inputTextarea rows="1" style="width:100%;resize:none" 
     value="#{cusBean.saveAll}" autoResize="false" 
     validatorMessage="Wrong format"> 
     <f:validateRegex pattern="#{msgs.pattern}" /> 
     </p:inputTextarea> 

     <ui:param name="conditionOK" 
     value="#{facesContext.postback and !facesContext.validationFailed}" /> 

     <p:commandButton value="#{msgs.button_overwrite_all}" 
     onclick="if(#{conditionOK}){confirmation.show()}"/> 
</h:form> 
+0

:

그래서 당신이 원하는 것 무엇 요청의 상태를 확인하기 위해 primefaces에게 args 변수를 사용하여 다음 (이전 응답에 표시된 것처럼) 분야의 아약스 유효성 검사를 수행하고있다 따라서 페이지가 렌더링되고 사용자가 유효성 검사를 통과하지 못하는 텍스트 영역에 무언가를 입력하면 확인 대화 상자가 표시됩니까? 조금 더 자세한 과정을 설명하십시오. – user1983983

+0

내 질문을 업데이트했습니다. 그것의 성가신 누군가가 질문을 편집했습니다. –

답변

0

JSF 유효성 검사가 당신을위한 방법이라고 생각하지 않습니다. 이 경우 모델 데이터 변경을 방지하기 위해 유효성 검사가 실패합니다.
자바 스크립트를 확인하려면 HTML의 섹션을 업데이트해야합니다. JavaScript는 Expression을 재평가하지 않으므로 처음으로 뷰를 렌더링 한 값이 매번 사용됩니다.

은 XHTML의에 다음을 시도해보십시오

<h:form id="save_all_form"> 
    <p:inputTextarea id="input" rows="1" style="width:100%;resize:none" 
    value="#{cusBean.saveAll}" autoResize="false"> 
    <p:ajax global="false" update="input submit" partialSubmit="true"/> 
    </p:inputTextarea> 

    <p:commandButton id="submit" value="#{msgs.button_overwrite_all}" 
    onclick="if(#{cusBean.validate(msgs.pattern)}){confirmation.show()}"/> 
</h:form> 

그리고 CusBean에서이 방법을 추가

public boolean validate(String pattern) { 
    return getSaveAll().matches(pattern); 
} 

결과가 될 것입니다, 장소와 값의 소요 JSF 검증이 아니라고 textArea는 변경할 때마다 제출됩니다. 또한 commandButton-section이 업데이트되어 조건이 업데이트됩니다.

+0

facescontext.validateFailed는 Javascript 호출입니다. 그렇지 않습니다. [this post] (http://stackoverflow.com/questions/6434866/defining-and-reusing-variable-in-jsf-page)에서 언급했듯이 ui : param은 값이 사용될 때마다 다시 평가됩니다. –

+0

내가 말한 것과 정확히 반대되는 점은'if (# {conditionOK}) {confirmation.show()}'가 자바 스크립트 호출이고 commandButton을 결코 업데이트하지 않으므로'# {conditionOK}'는 항상 '참'인 초기 값이다. 표현식은 뷰 렌더링 시간에만 평가됩니다. – user1983983

+0

힌트를 주셔서 감사합니다 commandButton이 업데이트되지 않았습니다! –

0

다른 답변과 마찬가지로 onclick 이벤트가 너무 빨라서 요청이 아직 제출되지 않았기 때문에 !facesContext.validationFailed을 사용하여 JSF 요청의 유효성 검사 상태를 확인할 수 없습니다. 유효성 검사가 실행되지 않았으므로 onclick 동안 유효성 검사 상태가 항상 false (잘 정렬 됨)가됩니다.

<p:commandButton value="#{msgs.button_overwrite_all}" id="createReport" onclick="if(!args.validationFailed){confirmation.show();}"/> 
관련 문제