关闭

Struts2的输入校验方式

标签: struts2struts2输入校验
11222人阅读 评论(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
查看评论

Struts2 输入校验 实例讲解

信息基本校验对于每个web框架输入输入校验都是一个重要的部分,对用户输入的数据进行有效的过滤,是保持系统安全的一方面措施.Struts2也不例外,同样也提供了更简易的输入校验机制,Struts2提供的输入校验有两种方式,一种是硬编码的方式,一种是采用Struts2的输入校验框架进行校验,即采用XML...
  • lilp_ndsc
  • lilp_ndsc
  • 2009-04-07 14:51
  • 10395

Struts2的输入校验流程(学习记录)

Struts2的输入校验流程(学习记录)
  • u011768325
  • u011768325
  • 2015-04-28 15:11
  • 837

Struts2中的两种输入校验方法

struts中提供两种校验方法:硬编码和校验框架;        硬编码就是直接写validate()进行验证,validate()方法对应execute()方法。      &#...
  • u011225629
  • u011225629
  • 2015-08-27 21:29
  • 1776

Struts2的输入校验,手工实现输入校验

Struts2的输入校验 手工实现输入校验 (核心:重写valiadate()方法校验单个处理逻辑)   1;jsp(登录) String path = request.getContextPath(); String basePath = request.getS...
  • pangqiandou
  • pangqiandou
  • 2016-10-30 12:25
  • 599

六、Struts2之输入校验

一、Struts2输入校验介绍   Struts2的输入校验和类型转换都是对请求参数进行处理。 输入校验顾名思义就是请求参数是否能够满足一定的要求;   客户端校验&服务器端校验 客户端校验是指在浏览器这端通过Javascript进行初步校验,为了减轻服务器端...
  • xiazdong
  • xiazdong
  • 2012-02-03 14:34
  • 12443

Struts2输入校验以及错误信息处理(2)——用Struts2定义好的校验框架进行校验

Struts2的输入校验有两种方式:一种是用Action中定义的validate()方法进行校验,一种是用Struts2定义好的校验框架进行校验。前者里面的逻辑判断要自己写,而后者只需要传递相应的参数即可。 不管是哪种方式,程序执行的流程都是一样的,执行流程如下: 1、对表单传递过来的数...
  • hackerain
  • hackerain
  • 2011-11-12 20:15
  • 1981

JavaEE----使用Struts2的输入校验之手动编码校验

Struts.xml /demo04/success.jsp /demo04/login.jsp /demo04/success.jsp /demo04/login.jsp login.jsp 用户名: 密码: ...
  • bluzelee2011
  • bluzelee2011
  • 2015-01-23 15:48
  • 545

struts2 验证框架

java代码: 查看复制到剪贴板打印 public class UserModel {       private String account;...
  • DOVEty
  • DOVEty
  • 2013-10-28 14:26
  • 623

Struts2中的两种校验方法

1. Struts2中的输入校验 2. 编码方式校验   1) Action一定要继承自ActionSupport   2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.   ...
  • u014381710
  • u014381710
  • 2015-10-16 23:30
  • 1020

struts2复合类型数据校验实例

1.创建一个User.java package action; public class User { private String userName; private int userAge; private String userTelephone; public Strin...
  • u013288707
  • u013288707
  • 2017-03-20 10:17
  • 98
    欢迎关注个人微信号
      欢迎关注微信账号:在路上的coder .每天一篇java相关或互联网相关的文章




    个人资料
    • 访问:825769次
    • 积分:2955
    • 等级:
    • 排名:第14098名
    • 原创:87篇
    • 转载:4篇
    • 译文:0篇
    • 评论:26条
    资源分享地址
    个人博客地址
    博客专栏
    最新评论