java - 使用 ADF 11 的 JSF 密码确认验证

标签 java validation jsf oracle-adf

我如何创建一个 validator 来验证用户是否在密码字段和密码确认字段中输入了相同的值?

我是在托管 bean 中完成的,但我更喜欢使用 JSF validator ...

真正的问题是,如何创建一个 validator 来访问除被验证组件之外的其他 JSF 组件?

我正在使用 ADF Faces 11。

谢谢...

最佳答案

The real question is, how to create a validator that access other JSF components other than the component being validated?

不要尝试直接访问组件;你会后悔的。 JSF 的验证机制最适合防止垃圾进入模型。

您可以使用不同类型的托管 bean;形式的东西:

/*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;
    }
  }
}

这是使用方法绑定(bind)机制绑定(bind)的:

<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 Validation ( JSR 303 ) 来完成这类事情。

关于java - 使用 ADF 11 的 JSF 密码确认验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493047/

相关文章:

java - 我试图在中间画一条线。我尝试了不同的坐标

java - 添加 JPanel 时 JScrollPane 不显示滚动条

java - 在不使用接口(interface)的情况下对自定义对象的数组列表进行排序

java - 如何在 JSF 标记中操作字符串?

java - 当他使用相同的凭据登录两次时如何使用户 session 无效

java - 在 JAVA 中使用 Microsoft 智能卡 Minidriver

ruby-on-rails - 验证多个中至少一个的存在

javascript - jQuery如何在不检查扩展名的情况下检查上传的文件是否是图像?

javascript - 使用数据破折号属性进行 Angular 2 表单字段验证

jsf - 从托管 bean 访问 ejb 时出现异常