2009年4月27日星期一

ADF Validator

    实际应用中经常遇到对业务相关的数据进行Validate的情况。比如对输入数据进行格式限制/范围限制等。ADF为开发人员提供了相对灵活的解决方案。这里提供了几种Validator的不同实现方式。

    (下述均使用Oracle XE自带的HR示例中Employees表作为示例表)
  1. 使用EO层次的Validator

    首先,ADF框架中所有的Validator默认都使用EO级别的Validator。EO层次可以设置Entity级别的Validator或Attributes级别的Validator。

    选择相应的级别,点击界面上的加号即可创建Validator,ADF提供了灵活的Validator以供选择


    选择需要的Validator Rule Type,写入相应的验证规则后,即可在Failure Handling中写入验证失败的抛出消息。在此处设置的消息将写入资源文件中。


    最后,当VO被拖入页面时,对应控件将自动包含一个<f:validator>子控件,其绑定为EO层次的Validator。


  2. 在ManageBean中实现Validator

    ADF本身提供的Validator相对比较灵活,但当EO的重用程度比较高时(如不同的VO使用相同的EO,需要设置不同验证规则/不同弹出消息,甚至不同页面使用相同VO,需要不同验证规则),EO级别的Validator显然不能满足要求。则可以通过重写Validator并添加至页面控件的绑定以实现。
    <f:validator>绑定的对象为一个属性,所以首先应为该Validator创建一个实现Validator接口的Class,最简单的如下(可以写入更复杂的验证逻辑)

    public class testValidator implements Validator {
    public void validate(FacesContext context, UIComponent component,
    Object obj) throws ValidatorException {
    throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_WARN, "TEST", "TEST MESG"));
    }
    }

    在MB中创建一个该属性的实例,并构造相应的get/set方法如下

        private testValidator test = new testValidator();

    public void setTest(testValidator test){
    this.test = test;
    }

    public testValidator getTest(){
    return this.test;
    }

    最后,通过EL表达式将该属性绑定至<f:validator>

    <f:validator bindings="#{backing_ExpsProYbudgetUpdate.test}">


0 评论:

发表评论