关闭

Struts2的输入校验方式

标签: struts2struts2输入校验
11161人阅读 评论(1) 收藏 举报
分类:

Struts2的输入校验

输入校验的方式:

  • 代码校验
  • 配置校验
    • xml配置校验(常用)
    • 注解配置校验

代码输入的校验:

  • 覆盖ActionSupport的validate()方法,在这个方法中完成对参数的校验。validate方法会在参数封装之后,execute方法(也就是Action中定义的方法)执行之前执行。如果validate方法向fieldError中添加了错误信息,那么就不会执行execute方法,而是跳转到input视图。具体流程如下:
  • 示例代码(这里是一模型驱动,bean就是一个简单的User对象)
    public class ValidateAction extends ActionSupport implements ModelDriven<User>{
    	
    	private User user = new User();
    	@Override
    	public User getModel() {
    		return user;
    	}
    	/**
    	 * 代码校验的方式
    	 */
    	@Override
    	public void validate() {
    		if(user.getUname()==null || user.getUname().isEmpty()){
    			this.addFieldError("uname", "用户名不能为空");
    		}
    	}
    	/**
    	 * 执行execute方法
    	 */
    	@Override
    	public String execute() throws Exception {
    		System.out.println("用户名:"+user.getUname());
    		return NONE;
    	}
    }

    <form action="/ex/user/vali.do" method="post">
        		用户名:<input type="text" name="uname"/><s:fielderror name="uname"/><br/>
        		<!--通过struts2标签显示错误信息-->
        		<input type="submit" value="提交">
    </form>

    这样就Ok。如果uname的值为空页面就会出现,错误信息。
  • 这里还可以为单个Action中的方法指定校验方法。方法命名的格式是:
    • 该方法不能有返回值,且不能有参数。方法名是:validate要校验方法的名称首字母大写。例如:void validateLogin()表示要校验的是,Action中的login方法。
  • 那它们的执行顺序是:
    • 先是Action中方法的校验方法执行,再是整个Action的校验方法执行。再是Action的execute方法执行。如果向fieldError中添加了错误信息,则execute方法不会执行。

Xml配置方式校验(经常使用):

  • 使用代码校验有不好的地方,就是修改的时候要修改代码。并且要自己编写校验规则。使用配置文件的格式来进行进行校验,不需要修改代码,并且struts2为我们提供了常用的校验规则。
  • Xml方式的校验条件是:
    • 你的Action必须实现Validateable接口。ActionSupport类已经实现了Validateable该接口。所以只要直接继承这个类就行。
    • 为要校验的属性提高get和set方法
  • 创建校验文件,规则是:
    • 校验文件的位置:如果是给某个Action提供校验,则放到和Action同包下就行。
    • 校验文件的名称:ActionName-validation.xml.例如:为LoginAction提供校验文件,名称是:LoginAction-validation.xml。也就是action的名称+"-validation.xml"
    • 校验文件的DTD:在xwork-core-2.3.4.1.jar下的xwork-validation-1.0.3.dtd
  • 为了在没有联网的情况下也能在编写校验文件的时候有提示,则如图所示:
  • 校验文件的格式如下:
    <validators>
    	<field name="">
    		<field-validator type="">
    			<param name=""></param>
    			<message></message>
    		</field-validator>
    	</field>
    </validators>
    

  • 其中的<field name="要校验的字段名称" /><field-validator type="要校验的规则"></field-validator/>。要校验的规则下面会说在哪里。<param name=""></param>校验规则的参数。<message key="不是不需的,可以通过资源文件指定">如果key指定了,这里就不用写了。错误信息</message>
  • 其中的校验规则在
  • 每个校验规则都有自己的参数,要知道有哪些参数,最好去看源码。这里就不一一介绍了。
  • 下面介绍校验规则:
    	required:当属性为null时校验失败;
    	requiredstring:当字符串属性为null或长度为0时校验失败:
    	参数trim:默认值为true,表示去除前后空白后再校验长度。
    	stringlength:当字符串长度不在指定范围内时校验失败:
    	minLength:指定字符串的最小长度;
    	maxLength:指定字符串的最大长度。
    	regex:属性不能匹配正则表达式时校验失败:
    	expression:指定正则表达式;
    	caseSensitive:默认值为true,表示不忽略大小写。
    	int:当int属性不在指定范围内校验失败:
    	min:最小值;
    	max:最大值。
    	double:当double属性不在指定范围内校验失败:
    	min:最小值;
    	max:最大值。
    	fieldexpression:属性必须是OGNL表达式:
    	expression:用来校验的ONGL表达式,例如pass == repass,其中pass和repass是两个属性名称,当这两个属性的值相等时校验通过,否则失败。
    	email:属性必须是合法的邮件地址;
    	url:属性必须是合法的网址;
    	date:属性必须是合法的日期格式。
    

  • 下面是一个比较完成的校验案例
    <validators>
    	<field name="id">
    		<field-validator type="requiredstring">
    			<message>学号不能为空</message>
    		</field-validator>
    		<field-validator type="regex">
    			<param name="expression">ITCAST_\d{4}</param>
    			<message>学号格式必须是"ITCAST_0000"</message>
    		</field-validator>
    	</field>
    	
    	<field name="username">
    		<field-validator type="requiredstring">
    			<message>用户名不能为空</message>
    		</field-validator>
    		<field-validator type="stringlength">
    			<param name="minLength">3</param>
    			<param name="maxLength">10</param>
    			<message>用户名长度必须在${minLength}~${maxLength}之间</message>
    		</field-validator>
    	</field>
    	
    	<field name="password">
    		<field-validator type="requiredstring">
    			<message>密码不能为空</message>
    		</field-validator>
    		<field-validator type="stringlength">
    			<param name="minLength">3</param>
    			<param name="maxLength">10</param>
    			<message>密码长度必须在${minLength}~${maxLength}之间</message>
    		</field-validator>
    	</field>
    	
    	<field name="repassword">
    		<field-validator type="requiredstring">
    			<message>确认密码不能为空</message>
    		</field-validator>
    		<field-validator type="fieldexpression">
    			<param name="expression">password == repassword</param>
    			<message>两次密码输入不一致</message>
    		</field-validator>
    	</field>
    	
    	<field name="age">
    		<field-validator type="required">
    			<message>年龄不能为空</message>
    		</field-validator>
    		<field-validator type="int">
    			<param name="min">18</param>
    			<param name="max">80</param>
    			<message>年龄必须在${min}~${max}之间</message>
    		</field-validator>
    	</field>
    	
    	<field name="email">
    		<field-validator type="requiredstring">
    			<message>Email不能为空</message>
    		</field-validator>
    		<field-validator type="email">
    			<message>邮件地址格式错误</message>
    		</field-validator>
    	</field>
    	
    	<field name="homepage">
    		<field-validator type="requiredstring">
    			<message>主页不能为空</message>
    		</field-validator>
    		<field-validator type="url">
    			<message>主页地址格式错误</message>
    		</field-validator>
    	</field>
    	
    	<field name="birthday">
    		<field-validator type="required">
    			<message>生日不能为空</message>
    		</field-validator>
    		<field-validator type="date">
    			<param name="min">1940-01-01</param>
    			<param name="max">2013-01-01</param>
    			<message>生日必须在${min}到${max}之间</message>
    		</field-validator>
    	</field>
    </validators>
    

  • 其中要注意的是生日这一块,如果按上面这么写‘年’只会出现两位。可以直接写上多少年到多少年。

Xml配置校验之私有校验(请求方法的校验):

  • 上面的校验是公有的,也就是整个Action中的方法共享校验。那如果要为某个的请求的方法提供校验规则。格式如下:
    • 文件位置还是和Action一个包下
    • 文件名称比较复杂,ActionName-配置文件中的<action name="值"/>-validation.xml。例如:
    • public class UserAction extends ActionSupport{
           public  String login(){
                  return "success";
               }
      }
      <action name="land" class="xx.xxx.xx.UserAction" method="login">
           <result>/succ.jsp</result>
      </action>



      
      
    • 名称为:UserAction-land-validation.xml。

因为时间关系注解校验就不写了,下次再写



























0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    欢迎关注个人微信号
      欢迎关注微信账号:在路上的coder .每天一篇java相关或互联网相关的文章




    个人资料
    • 访问:808390次
    • 积分:2822
    • 等级:
    • 排名:第14222名
    • 原创:86篇
    • 转载:4篇
    • 译文:0篇
    • 评论:25条
    资源分享地址
    个人博客地址
    博客专栏
    最新评论