版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337079
为了保证数据的正确性、规范性、安全性等,每个系统的输入都需要校验:
Struts2作为优秀的前端框架,就为我们能提供了几种校验数据的方式。
在了解这几种校验方式之前,建议先了解一下addActionMessage、addActionError、addFieldError这几个方法,可以参考博客:《addActionError,addFieldError,addActionMessage用法 》
如果您已经熟悉了这几个方法,那么来看struts2为我们提供的数据校验的方式:
在继承了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方法一样,验证方法总是先于被验证的方法执行。
这种方法不需要重写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封装的:
基于第二种方法的提示消息是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环境搭建》】
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有