为了保证数据的正确性、规范性、安全性等,每个系统的输入都需要校验:
Struts2作为优秀的前端框架,就为我们能提供了几种校验数据的方式。
在了解这几种校验方式之前,建议先了解一下addActionMessage、addActionError、addFieldError这几个方法,可以参考博客:《addActionError,addFieldError,addActionMessage用法 》
如果您已经熟悉了这几个方法,那么来看struts2为我们提供的数据校验的方式:
#1、重写ActionSupport的validate方法
在继承了ActionSupport的Action中,重写validate方法,在validate方法中对页面传来的数据进行校验:
Action中的validate方法:
@Override public void validate(){ System.out.println("validate invoked!!"); if(username==null || username.length()<6 ||username.length()>18){ this.addFieldError("username","用户名长度必须为6~18位"); } if(password==null || password.length()<6 ||password.length()>18){ this.addFieldError("password","用户名长度必须为6~18位"); } if(!repassword.equals(password)){ this.addFieldError("repassword","确认密码错误"); } }
在这个方法的开始,我先用System.out.println(“validate invoked!!”)打印出了一句此方法初始化的提醒,您可以在execute方法中也打印出一句“execute invoked!!”,运行时就会发现,validate方法是先于execute方法执行的,当在validate中发生验证异常时,就会自动跳过execute方法,默认返回"input",所以在设置struts.xml时,要添加一个名为“input”的result:
<struts> <package name="struts2" extends="struts-default"> <action name="registerAction" class="com.shengsiyuan.struts2.RegisterAction"> <result name="success">/success.jsp</result> <result name="input">/register.jsp</result> </action> </package> </struts>
在register.jsp页面显示校验结果:
<form action="registerAction"> <s:fielderror cssStyle="color: red"> </s:fielderror> 用户名:<input type="text" name="username"/> <br /> 密码:<input type="text" name="password"/> <br /> 确认密码:<input type="text" name="repassword"/> <br /> 生日:<input type="text" name="birthdate"/> <br /> </form>
同理,假如要对action中一个名为myExecute方法中的变量进行验证,需要增加validateMyExecute方法,并在validateMyExecute方法中进行验证操作,规则就是:添加的验证方法的名字为“validate+待验证方法的名字”,执行顺序同validate方法和execute方法一样,验证方法总是先于被验证的方法执行。
#2、用struts2自带的标签库进行验证:
这种方法不需要重写validate方法,后台代码不需要任何操作,只需要在jsp页面采用struts标签库即可:
<s:form action="registerAction" theme="simple"> <s:fielderror cssStyle="color: red"> </s:fielderror> 用户名:<s:textfield name="username"></s:textfield> <br /> 密码:<s:password name="password"></s:password> <br /> 确认密码:<s:password name="repassword"></s:password> <br /> 生日:<s:textfield name="birthdate"></s:textfield> <br /> <s:submit name="commit" value="提交" /> <br /> </s:form>
在action中定义的生日字段的类型为Date类型,故意在生日栏中填入“123”,就会提示不合法信息,但是这些信息都是struts封装的:
#3、自定义字段级别错误提示消息
基于第二种方法的提示消息是struts2封装的,我们也可以自定义,方法也特别简单,只需直接在跟action类相同的包下建立与action类相同名称的properties文件,比如我这个对RegisterAction.java这个action类中的字段进行验证,需要新建名为RegisterAction.properties文件,在这个peoperties文件中可以定义每个字段的不合法提示信息:
invalid.fieldvalue.username=username invalid ! invalid.fieldvalue.password=password invalid ! invalid.fieldvalue.birthdate=birthdate invalid !
这些提示语也可以写成中文,但是写成中文后会自动转换为Unicode编码的格式:比如:
invalid.fieldvalue.username=\u7528\u6237\u540D\u4E0D\u5408\u6CD5\uFF01(用户名不合法!) invalid.fieldvalue.password=\u5BC6\u7801\u4E0D\u5408\u6CD5\uFF01(密码不合法!) invalid.fieldvalue.birthdate=\u751F\u65E5\u4E0D\u5408\u6CD5(生日不合法!)
【 原创不易,转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate环境搭建》】