天天看点

编写ADF 验证

一 ADF验证架构

ADF总共有三个环节的验证,分别是View层,Model层和业务层.不同的层都提供了一些内置的验证提供给开发人员。如图我们可以看出各自的关系及次序:

编写ADF 验证

从上图我们看到,对于View层又包含二层,分别是Client和ADF Faces层,Client运行的客户端,可以用javascript实现,而ADF Faces运行在服务器端,必须用java类来实现。

二 ADF Face层验证

现在写一个邮件的验证类步骤:

1 编写java 类实现Validator接口:

public class EmailValidateBean implements Validator {

    
    public EmailValidateBean() {
        super();
    }

    public void validate(FacesContext facesContext, UIComponent uIComponent,
                         Object object) throws ValidatorException {
    
    }
}
           

2 编写验证代码:

public class EmailValidateBean implements Validator {
    String str="^(.+)@(.+)$";  //表达式
    Pattern enailVal= Pattern.compile(str);
    
    public EmailValidateBean() {
        super();
    }

    public void validate(FacesContext facesContext, UIComponent uIComponent,
                         Object object) throws ValidatorException {
        Matcher matcher=enailVal.matcher(object.toString());
        
        if(!matcher.matches()){
           // JSFUtils.addFacesErrorMessage("电子邮件格式出错!");
            FacesMessage f=new FacesMessage("电子邮件格式出错!");
            f.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(f);
        }
    }
}
           

3 注册.在face-config.xml添加validateor,代码如下:

<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
  <application>
    <default-render-kit-id>oracle.adf.rich</default-render-kit-id>
  </application>
  
  <!---注册电子邮件-->
  <validator>
    <validator-id>emailVal</validator-id>
    <validator-class>hr.EmailValidateBean</validator-class>
  </validator>
  <!---->
</faces-config>
           

4 在组件中使用定自义验证:

<af:inputText value="#{bindings.Email.inputValue}"
                        label="#{bindings.Email.hints.label}"
                        required="#{bindings.Email.hints.mandatory}"
                        columns="#{bindings.Email.hints.displayWidth}"
                        maximumLength="#{bindings.Email.hints.precision}"
                        shortDesc="#{bindings.Email.hints.tooltip}" id="it4">
                        <!--使用validatorId指定在face-config.xml中的validator-id-->
                        <f:validator validatorId="emailVal"/>
          </af:inputText>
           

三 Model层验证

在这层中我们开发人员用的是最多的,特别是在于绑定VO的时候,如图:

<af:inputText value="#{bindings.FirstName.inputValue}"
                        label="#{bindings.FirstName.hints.label}"
                        required="#{bindings.FirstName.hints.mandatory}"
                        columns="#{bindings.FirstName.hints.displayWidth}"
                        maximumLength="#{bindings.FirstName.hints.precision}"
                        shortDesc="#{bindings.FirstName.hints.tooltip}"
                        id="it2">
<strong><span style="color:#ff6666;">            <f:validator binding="#{bindings.FirstName.validator}"/>
</span></strong>          </af:inputText>
           

上面的标红色就是model层的验证。

四 业务层验证

1 在业务层,ADF提供了三种类型的验证,Attribute Level,Entity Level和Transction Level.在提交的时候,也是按前面的顺序执行。需要说明的是Transction验证默认是执行 的,但我们可以跳过此验证.具体做法是在page的定义文件中加入跳过DataControl验证,如下图:

<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
                version="11.1.1.61.92" id="popupPageDef" Package="pages"
                 <span style="color:#ff0000;"><strong>SkipValidation="skipDataControls"</strong></span>>
           

上面标红的代表跳过Transction Level的验证。

2 使用domain进行业务层验证(具体方法略)