2012-11-07 3 views
1

사용자 세부 정보를 묻는 PrimeFaces 대화 상자가 있습니다. 나는 아래와 같이 하나의 입력 텍스트 만 갖도록 단순화했다.내 작업 수신기가 호출되지 않는 이유

<p:dialog> 
     <h:form prependId="false"> 
      <p:growl showDetail="false" autoUpdate="true" life="4000"/> 
      <p:panelGrid columns="2"> 
       <h:outputText value="First Name" /> 
       <p:inputTextarea required="true" requiredMessage="First Name is required!" /> 
       <p:commandButton value="Add" actionListener="#{myBean.addUser}"/> 
      </p:panelGrid> 
     </h:form> 
</p:dialog> 

은 내가 입력 내 이름을하지 않을 때, 내 액션 청취자 내가 required="true" 검증이 이미 일어난 이후 정상이라고 생각하는 호출되지 않습니다 것을 알 수 있습니다.

조치 목록을 계속 호출 할 수있는 방법이 있습니까? 또는 required="true"을 제거하고 조치 수신기 메서드에서 모든 유효성 검사를 수행해야합니까?

+0

기본적으로 당신은 "required"= "false"'와 같이 동작하도록 "required" "true"'를 구성 할 수 있습니까? –

답변

2

조치 방법에 유효성 검증 로직을 넣으면 안됩니다.

필수 검사보다 더 많은 유효성 검사를 수행해야하는 경우 이에 대한 사용자 정의 유효성 검사기를 사용하십시오. 액션 메소드는 단순히 사용자를 추가해야하며 jsf 유효성 검사 단계에 의존해야합니다.

자세한 내용은 this link on the different validation options을 참조하십시오. 당신이 <p:inputTextarea/>의 값에 관계없이 actionListener 메소드를 호출 할 경우

+0

귀하의 요지가 명확하게 나타납니다! 감사합니다 –

2

단지 required="true"을 제거하고 액션 메소드에서 유효성 검사를 수행 수입 org.apache.commons.lang3에서

public void addUser() { 

     if(StringUtils.isBlank(user.firstName)) { 
      FacesContext.getCurrentInstance().addMessage(null, 
       new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error! ", 
       "First Name is required!")); 
      return; 
     } 
    } 

ISBLANK. StringUtils; 관련없는

:

제 생각에는,이 방법은 좋은 생각이 될 것으로 보인다.

+1

조치 방법은 유효성 검사를위한 나쁜 장소입니다. 이 단계에서 모델 값은 이미 업데이트되었으며 이전/초기 값으로 재설정하는 번거 로움이 있습니다 (JSF 프로세스 유효성 검사 단계에서 유효성을 검사하면 피할 수 있음). –

+1

당신은 절대적으로 옳습니다. 제 행동 방법에 결코 검증을하지 않습니다. 당신은 내 대답에 "나쁜 생각"이라는 용어를 완벽하게 은밀하게 설명합니다. –

+0

좋은 연습을 생각하지 못했습니다 ... 유효성 검사 부분을 읽기 시작할 것입니다. 현재, 모든 유효성 검사는 작업 수신기 메서드에서 수행됩니다. 리드 주셔서 감사합니다 ... –

관련 문제