出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.htmlhtml
http://www.blogjava.net/focusJ/archive/2010/11/15/367272.htmljava
使用基于XML配置方式实现输入校验时,Action也须要继承ActionSupport,而且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml。ActionClassName为action的简单类名,-validation为固定写法。若是Action类为cn.validate.action.UserAction,那么该文件的取名为:UserAction-validation.xml。正则表达式
下面是xml配置信息express
1 <!DOCTYPE validators PUBLIC 2 "-//Apache Struts//XWork Validator 1.0.2//EN" 3 "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> 4 5 <validators> 6 <field name="username"> 7 <field-validator type="requiredstring"><!-- 必填字符串校验器 --> 8 <param name="doTrim">true</param><!-- 去掉两边空格 --> 9 <message>用户名不能为空</message> 10 </field-validator> 11 </field> 12 <field name="mobile"> 13 <field-validator type="requiredstring"><!-- 必填字符串校验器 --> 14 <param name="doTrim">true</param><!-- 去掉两边空格 --> 15 <message>手机号码不能为空</message> 16 </field-validator> 17 <field-validator type="regex"><!-- 正则表达式校验器 --> 18 <param name="expression"><![CDATA[^1[358]\d{9}$]]></param><!-- 表达式 --> 19 <param name="caseSensitive">false</param><!-- 区分大小写 --> 20 <param name="trim">true</param><!-- 去掉两边空格 --> 21 <message>手机号码格式不正确</message> 22 </field-validator> 23 </field> 24 </validators>
action类:apache
1 package cn.validate.action; 2 3 import com.opensymphony.xwork2.ActionContext; 4 import com.opensymphony.xwork2.ActionSupport; 5 6 @SuppressWarnings("serial") 7 public class XmlValidationAction extends ActionSupport { 8 private String username; 9 private String mobile; 10 11 public String getUsername() { 12 return username; 13 } 14 15 public void setUsername(String username) { 16 this.username = username; 17 } 18 19 public String getMobile() { 20 return mobile; 21 } 22 23 public void setMobile(String mobile) { 24 this.mobile = mobile; 25 } 26 27 public String update() { 28 ActionContext.getContext().put("message", "update success!"); 29 return "success"; 30 } 31 32 public String sace() { 33 ActionContext.getContext().put("message", "save success!"); 34 return "success"; 35 } 36 }
对于指定方法进行校验咱们又该怎么作呢?数组
很简单,咱们只须要改下xml文件名便可。格式为ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中action名称。框架
好比:在XmlValidationAction中的update()进行校验,咱们把xml文件名改成 XmlValidationAction-validation_update-validation.xml便可,其余的都同样。jsp
另外struts还提供了不少校验器,我发一些经常使用的出来,至于用法,你们能够看框架的源码,所属包为com.opensymphony.xwork2.validator.validators测试
struts框架提供的校验器
required必填校验器
requiredstring必填字符串校验器
stringlength字符串长度校验器
regex正则表达式校验器
int整数校验器
double双精度浮点型校验器
filedexpression字段OGNL表达式校验器
email邮件校验器
url网址校验器
date日期校验器
conversion转换校验器
visitor用于校验action中的符合属性
expressionOGNL表达式校验器ui
/********************************************************更新**********************************************************/
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme() + "://" 6 + request.getServerName() + ":" + request.getServerPort() 7 + path + "/"; 8 %> 9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 10 <html> 11 <head> 12 <base href="<%=basePath%>"> 13 <title>My JSP 'fail.jsp' starting page</title> 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 </head> 20 <body> 21 <s:form action="user/login.action" validate="true"> 22 <table 23 style="border-style: solid; border-color: lightblue; position: absolute; top: 30px"> 24 <tbody> 25 <tr> 26 <td> 27 <div 28 style="margin-center: 32px; border-style: solid; border-color: lightblue; border-width: 2px;"> 29 <a>用户名:</a> 30 <input id="username" name="user.name" type="text" /> 31 </div> 32 </td> 33 </tr> 34 <tr> 35 <td> 36 <div 37 style="margin-center: 32px; border-style: solid; border-color: lightblue; border-width: 2px"> 38 <a>密 码:</a> 39 <input id="password" name="user.password" type="password" /> 40 </div> 41 </td> 42 </tr> 43 <!-- 弹出出错信息 --> 44 <tr> 45 <td> 46 <div id="msg"><s:fielderror/></div> 47 </td> 48 </tr> 49 <tr> 50 <td> 51 <div> 52 <span><input id="submit" type="submit" value="登陆" /> 53 </span> 54 </div> 55 </td> 56 </tr> 57 </tbody> 58 </table> 59 </s:form> 60 </body> 61 </html>
这里有个地方须要注意:form中要加入validate=“true”这个属性。
Action.action这个挺简单的就是常规的action写法,在execute中验证表单,或本身封装方法验证表单,可是不能继承validate()方法,由于action执行的时候实现检察validate方法的,若是这样的话就配置重复了,不过有什么结果我没有测试(没啥意义)。
1 <constant name="struts.custom.i18n.resources" value="globalMessages"></constant> 2 <include file="defaule.xml" /> 3 <!-- 有关用户的操做 --> 4 <package name="user" extends="struts-default" namespace="/user"> 5 <action name="login" class="bbs.action.UserAction"> 6 <result name="success">/system/list.action</result> 7 <result name="input">/login.jsp</result> 8 </action> 9 </package>
有一点有必要提一下,action中必须配置input这个result,由于若是验证失败后struts2会自动转向到input的result,无论你的action中配置的验证失败的result是什么。因此这个input属性的result不能落下。