一 ADF验证架构
ADF总共有三个环节的验证,分别是View层,Model层和业务层.不同的层都提供了一些内置的验证提供给开发人员。如图我们可以看出各自的关系及次序:
从上图我们看到,对于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进行业务层验证(具体方法略)