- 输入校验
- 编程式校验(对action内所有方法进行校验)
个人感觉应该就是类似装饰器的意思。。。
这个方法必须实现实现Validateable接口,重写其中的validate方法,因为我们的action继承自actionSupport,actionsupport帮我们实现了这接口,所以我们只需要重写validate方法。
package action;
import com.opensymphony.xwork2.ActionSupport;
import model.CheakModel;
public class CheakAction extends ActionSupport {
private CheakModel cheakModel;
@Override
public void validate() {
String user_name = cheakModel.getUser_name();
if(user_name.trim().equals("") || user_name == null || user_name.length() == 0){
addFieldError("name","error username!");
}
}
@Override
public String execute() throws Exception {
return "success";
}
public CheakModel getCheakModel() {
return cheakModel;
}
public void setCheakModel(CheakModel cheakModel) {
if(this.cheakModel == null){
this.cheakModel = cheakModel;
}
}
}
在使用addFieldError的时候发现会报没有定义result的错误
Could not find action or result: /Mystruts2_new_war_exploded/cheak?cheakModel.user_name=&cheakModel.password=123&cheakModel.age=5
com.opensymphony.xwork2.config.ConfigurationException: No result defined for action action.CheakAction and result input
发现是因为在jsp页面中没有使用<s>来实现页面跳转,要解决这个也很简单,在jsp页面设置为<s:url action = "your action">就可以了。但是也可以在struts.xml中为添加一个name为input的result
<action name="cheak" class="action.CheakAction" method="execute">
<result>/cc.jsp</result>
<result name="input">/ii.jsp</result>
</action>
这样页面就会出现你自己设置的错误信息~
- 在xml中设置校验
action中必须为属性提供getXXX、setXXX方法,因为代码校验是在Action本类中来完成校验,这说明我们可以直接使用本类的private属性,但如果使用XML配置方式校验,这需要使用校验框架的代码来完成校验工作,那么校验框架需要调用Action的getXXX()方法来获取被校验的属性,所以一定要为被校验的属性提供getXXX()方法- 创建 xml 文件
路径:必须与action同包下
命名规范:
actionClass-actionName-validation.xml
actionClass:action的类名
actionName:action的访问名称,即 在struts.xml中配置的,<action name="">
validation.xml:固定后缀名。
比如:Demo02Action-Demo02Action_add-validation.xml 这种是对特定方法进行校验
- 创建 xml 文件
-
填写xml内容
struts2 中有很多的内置校验方法
-
若使用xml配置的方式实现校验,并且想看到错误信息
在jsp文件中需要这么写
<s:fielderror fieldName="cheakModel.user_name"></s:fielderror> // 这个是你想看到的字段的校验错误信息
在 struts2.5中
xml的头必须这样写
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
以前是
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
还使用以前的话会导致以下错误
Local DTD is missing for publicID
完整的xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name = "cheakModel.user_name">
<field-validator type = "requiredstring">
<param name = "trim">false</param>
<message>space in username</message>
</field-validator>
</field>
</validators>