struts2的校验可以用两种方式实现:
一、java代码实现:
以action类实现ActionSupport的方式实现代码校验,struts框架会调用重写的validate()方法对所有的action方法进行校验过滤。代码片段如下:
package test;
import com.opensymphony.xwork2.ActionSupport;
public class ValidateAction extends ActionSupport {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String test(){
return "success";
}
public String execute(){
return "success";
}
public void validate() {
// TODO Auto-generated method stub
if(id == null){
this.addFieldError("id", "id不能为空");
}
if(name == null || name.trim().length() == 0){
this.addFieldError("name", "name不能为空");
}
}
}
jsp页面片段如下:
<s:fielderror />
<form action="/validate.action">
<input type="text" name="id" /></br>
<input type="text" name="name" /></br>
<input type="submit" value="提交"/>
</form>
其中<s:fielderror />负责将validate()方法中的错误信息列表进行输出,这样就完成了整个验证流程。
如果仅仅只需要实现对execute()方法进行验证,那么只需要实现validateExecute()方法。框架会自动绑定execute()方法进行验证,其他方法则不进行验证。
二、xml配置文件实现:
xml的验证需要为action类建立对应的.xml配置文件,文件命名格式为ActionClassName-validation.xml。以前文所创建的类为例则需要建立ValidateAction-validation.xml文件。
配置文件如下:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="id">
<field-validator type="requiredstring">
<message key="requiredstring"/>
</field-validator>
</field>
<field name="name">
<field-validator type="requiredstring">
<message key="requiredstring"/>
</field-validator>
</field>
</validators>
如上配置可以完成前文中validate()方法的实现,其他代码如jsp文件和struts.xml配置则完全相同。
如需实现对action中指定方法的xml校验则需要建立ActionClassName-ActionName-validation.xml的配置文件,其中ActonName为struts.xml中的action的名称。如:
<!-- 首先配置通配符实现url制定方法调用 -->
<action name="validate_*" class="test.ValidateAction" method="{1}">
<result name="success">/page/hello.jsp</result>
</action>
要对test()方法进行校验,校验的文件名则为:ValidateAction-validate_test-validation.xml
对execute()方法进行校验,校验的文件名则为:ValidateAction-validate_execute-validation.xml
这样变实现了对不同action 方法绑定校验。