struts的校验功能
来源:互联网 发布:夜间灯光数据下载地址 编辑:程序博客网 时间:2024/05/16 07:46
struts2提供了对所有的方法进行校验和指定的方法的校验,解决了struts1的一个大问题
校验的流程:
1。类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。
2。如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。
3。系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4。再调用action中的validate()方法。
5。经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
struts2提供了两种方式进行校验:手工方式和xml方式
一,手工方式
1,对于validate方式的验证,要在struts的配置文件中,配置<resultname=”input” >/login.jsp</result>
<packagename="validator"namespace="/validator"extends="struts-default">
<actionname="loginAction_*"class="hwt.action.ValidatorAction"method="{1}">
<!—记得要配置这个错误的输出页面,不然会报错-->
<resultname="input">/login.jsp</result>
<resultname="ok">/show.jsp</result>
</action>
</package>
Action中:
//需要继承ActionSupport,才能实现alidator的验证功能
public class ValidatorAction extends ActionSupport {
private Stringusername;
private Stringtel;
public String login(){
ActionContext.getContext().put("msg","login success");
return"ok";
}
public String regist(){
ActionContext.getContext().put("msg","registe success");
return"ok";
}
//======对所有的方式进行校验
public void validate () {
if(username ==null || "".equals(username)){
this.addFieldError("username","用户名不能为空");
}else if(tel == null ||"".equals(tel)){
this.addFieldError("tel","电话号码不能为空");
}else if(!Pattern.compile("^1[358]\\d{9}$").matcher(tel).matches()){
this.addFieldError("tel","电话号码的格式不对");
}
}
//======对指定的方式进行校验
public void validateLogin() {
if(username ==null || "".equals(username)){
this.addFieldError("username","用户名不能为空");
}else if(tel == null ||"".equals(tel)){
this.addFieldError("tel","电话号码不能为空");
}else if(!Pattern.compile("^1[358]\\d{9}$").matcher(tel).matches()){
this.addFieldError("tel","电话号码的格式不对");
}
}
//setter getter方法。。。
}
重写ActionSupport的validate方法,对Action中所有的方法进行校验,要对指定的方法进行校验,那么就只要validateXxx() xxx为要验证的方法的名字,第一个字母大写,但是不管是否通过validateXxx(),最后还是都得经过validate()方法,通过判断fieldError是否有错误,如果有就不会进入方法,而是到指定的input的路径输出错误信息
在页面通过<s:fieldErrorfiledName=”..”/> 来输出错误信息,当然不要忘了导入strus2的标签库:<%@taglib prefix="s"uri="/struts-tags"%>
<body>
<formaction="${pageContext.request.contextPath }/validator/loginAction_login.action"method="post">
用户名:<inputtype="text"name="username"value="${username }"/>
<s:fielderrorfieldName="username"/><br/>
电话号码:<inputtype="text"name="tel"value="${tel }"/>
<s:fielderrorfieldName="tel"/><br/>
<Inputtype="submit"value="登录"/>
</form>
</body>
2,xml方式的验证
xml方式的校验和手工代码校验相比,其他地方都不要改,只是在Action中不需要写validate的方法,而是通过配置xml文件来实现校验:
首先,在action类中同样需要继承ActionSupport 和strust.xml中配置<result name=”input”> </result>
·如果要对Action中的所有的方法进行校验的话,那么就需要在Action所在的类下面建立一个ActionClassName-validation.xml,以上例为例:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEvalidators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<fieldname="username">
<field-validatortype="requiredstring">
<message>用户名不能为空</message>
</field-validator>
</field>
<fieldname="tel">
<field-validatortype="requiredstring">
<message>手机号码不能为空</message>
</field-validator>
<!-- 正则表达式的验证器-->
<field-validatortype="regex">
<paramname="expression"><![CDATA[^1[358]\\d{9}$]]></param>
<message>手机号码格式不对</message>
</field-validator>
</field>
</validators>
·如果要给Action中指定的方法进行校验的话,那么只需要建立一个ActionClassName-ActionName-validation.xml,内容和上面是完全一样的,
ActionName为struts.xml中action的名称。例如:在实际应用中,常有以下配置:
<actionname="user_*"class="cn.hwt.action.UserAction"method="{1}“>
<resultname="success">/WEB-INF/page/message.jsp</result>
<resultname="input">/WEB-INF/page/addUser.jsp</result>
</action>
UserAction中有以下两个处理方法:
public String add()throws Exception{
....
}
public String update()throws Exception{
....
}
要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml
要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml
当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:
1。AconClassName-validation.xml
2。ActionClassName-ActionName-validation.xml
系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于action方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。
当action继承了另一个action,父类action的校验文件会先被搜索到。
假设UserAction继承BaseAction:
<action name="user" class="cn.itcast.action.UserAction"method="{1}">
</action>
当要访问上面action,系统先搜索父类的校验文件:BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索子类的校验文件: UserAction-validation.xml, UserAction-user-validation.xml。应用于上面action的校验规则为这四个文件的总和。
- struts的校验功能
- 具有自动数据校验功能的struts标签
- struts的文本校验
- Struts的数据校验
- struts的校验
- Struts的校验方式
- Struts 2的校验框架
- 跳过struts的后台校验
- struts 2的输入校验
- Struts集成的校验方式
- Struts 2 的输入校验
- struts校验
- struts 校验
- struts校验
- struts校验
- Struts校验
- struts 校验
- Tapestry的数据校验功能
- ECB CBC and 3DES
- linux后台运行程序及恢复
- Java程序员从笨鸟到菜鸟之(六十六)细谈struts2(十二)struts2国际化底层大揭秘
- jQuery选择器大全
- EasySize-Dialog-resizing-in-no-time
- struts的校验功能
- 【转】文本文件,二进制文件,文本读写,二进制读写
- windows解决端口冲突
- LCD 驱动之硬件时序
- 10A 1032 零星笔记
- 报表导出模块实现
- 学习C++和编程的50个观点
- zero简化选择结构编码
- 使用 ASMCMD 工具管理ASM目录及文件