ADF 11을 사용한 JSF 비밀번호 유효성 검증
-
18-09-2019 - |
문제
사용자가 암호 필드와 암호 확인 필드에 동일한 값을 입력했는지 확인하는 유효성 검사기를 어떻게 만들 수 있습니까?
나는 관리하는 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
제휴하지 않습니다 StackOverflow