문제

사용자가 암호 필드와 암호 확인 필드에 동일한 값을 입력했는지 확인하는 유효성 검사기를 어떻게 만들 수 있습니까?

나는 관리하는 Bean에서 그것을했지만 JSF 유효성 검사기를 사용하여 그것을 선호합니다 ...

실제 질문은 검증 된 구성 요소 이외의 다른 JSF 구성 요소에 액세스하는 유효성 검사기를 만드는 방법입니다.

ADF Faces 11을 사용하고 있습니다.

감사...

도움이 되었습니까?

해결책

실제 질문은 검증 된 구성 요소 이외의 다른 JSF 구성 요소에 액세스하는 유효성 검사기를 만드는 방법입니다.

구성 요소에 직접 액세스하려고 시도하지 마십시오. 당신은 그것을 후회할 것입니다. JSF의 검증 메커니즘은 정크가 모델에 들어가는 것을 방지하는 데 가장 적합합니다.

다른 유형의 관리 콩을 사용할 수 있습니다. 형태의 것 :

/*Request scoped managed bean*/
public class PasswordValidationBean {
  private String input1;
  private String input2;
  private boolean input1Set;

  public void validateField(FacesContext context, UIComponent component,
      Object value) {
    if (input1Set) {
      input2 = (String) value;
      if (input1 == null || input1.length() < 6 || (!input1.equals(input2))) {
        ((EditableValueHolder) component).setValid(false);
        context.addMessage(component.getClientId(context), new FacesMessage(
            "Password must be 6 chars+ & both fields identical"));
      }
    } else {
      input1Set = true;
      input1 = (String) value;
    }
  }
}

이것은 메소드 결합 메커니즘을 사용하여 바인딩됩니다.

<h:form>
  Password: <h:inputSecret
    validator="#{passwordValidationBean.validateField}"
    required="true" />
  Confirm: <h:inputSecret
    validator="#{passwordValidationBean.validateField}"
    required="true" />
  <h:commandButton value="submit to validate" />
  <!-- other bindings omitted -->
  <h:messages />
</h:form>

앞으로 Bean 검증을 사용하여 이런 종류의 작업을 수행 할 수 있어야합니다 (JSR 303).

다른 팁

컨텍스트 맵에서 항상 다른 필드의 값을 가져 와서 여러 필드에서 검증을 수행 할 수 있습니다. 아래와 같은 것 :

public void  validatePassword2(FacesContext facesContext, UIComponent uIComponent, Object object) throws ValidatorException{
    String fieldVal = (String)object;

    String password1 = (String)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("password1");
    if(!password1.equalsIgnoreCase(fieldVal)){
        FacesMessage message = new FacesMessage("Passwords must match");
        throw new ValidatorException(message);
    }
}   

그리고 JSF는 다음과 같습니다.

<h:inputSecret value="#{profile.password2}" validator="#{brokerVal.validatePassword2}" required="true" requiredMessage="*required" id="password2" />

HTH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top