Struts中使用validate()输入校验方法详解
作者:mrr 时间:2023-03-02 19:10:41
1、在ActionSupport中有一个validate()方法,这个方法是验证方法,它会在execute()方法执行之前执行,所以能够起到很好的验证的作用。
@Override //重写Action中的validate()方法
public void validate() {
if(null==this.username||this.username.length()<4||this.username.length()>6){
this.addActionError("username invadate");
}
}
a、如果验证没有通过,我们可以调用addActionError("Error Message");这样,这个错误信息就被保存了。
validate整个方法都执行完成之后,系统就会自动去检查name="input"所对应的jsp页面,一般建议跳到我们注册的页面,即哪里来,回哪里去
/registerResult.jsp
/register.jsp
b、然后我们在register.jsp
即最初的注册页面添加上这个struts2标签
<s:actionerror cssStyle="color:red"/>
表示的意思是:如果存在错误信息,即actionerror存在,则输出这个错误信息,
而且,我们可以对标签进行css的设置
//注意,使用struts2标签必须在头文件中引入标签:
<%@ taglib prefix="s" uri="/struts-tags" %>
c、
一种比较日期的方法:
brithday与graduate为Date类型
if(null != birthday && null != graduation)
{
Calendar c1 = Calendar.getInstance();
c1.setTime(birthday);
Calendar c2 = Calendar.getInstance();
c2.setTime(graduation);
if(!c1.before(c2))
{
this.addActionError("birthday should be before graduation");
}
}
2、Action级别与Field级别。通过这种方式,让我们可以在添加错误的时候可以往不同的级别添加,提示错误信息的时候可以更灵活,而不会把所有的信息都添加到Action级别以后,所有的信息都同一显示出来。比如说:我们要把重复密码错误这个错误信息用红色的字体表示,而其他信息,比如说用户名、年龄等信息用绿色的字体来表示,这个时候通过使用往不同的级别添加就可以了。
在注册页面,也只要写一句Field级别的标签就可以了。如下:
<s:actionerror cssStyle="color:red"/>//action级别
<s:fielderror cssStyle="color:blue"></s:fielderror>//field级别
public void validate() {
if(null==this.username||this.username.length()<4||this.username.length()>6){
this.addActionError("username invadate");//往Action级别添加错误信息
this.addFieldError("username", "username invadate in field");//往field级别处添加错误信息
}
}
3、发送错误后,将原来的信息还显示在表单里面。
<s:form action="RegisterAction">
<s:textfield name="username" label="username"></s:textfield>
<s:password name="password" label="password"></s:password>
<s:password name="repassword" label="repassword"></s:password>
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="birthday" label="brithday"></s:textfield>
<s:textfield name="graduate" label="graduate"></s:textfield>
<s:submit value="submit"></s:submit>
</s:form>
使用struts2标签,能够自动排版,然后能够将错误的Field级别的信息显示出来,如下所示。
4、不过这种自动使用table来排版的方式虽然方便,但是很多情况下不符合我们的需求,所以我们可以使用自定义的排版方式。
方法二:定义排版方式为simple,这样子我们就可以按照html的方式来自己排版了 。
field级别的错误也不会被自动显示出来。
<s:form action="RegisterAction" theme="simple"><br/>
username:<s:textfield name="username" label="username"></s:textfield><br/>
password:<s:password name="password" label="password"></s:password><br/>
repassword:<s:password name="repassword" label="repassword"></s:password><br/>
age:<s:textfield name="age" label="age"></s:textfield><br/>
birthday:<s:textfield name="birthday" label="brithday"></s:textfield><br/>
graduate:<s:textfield name="graduate" label="graduate"></s:textfield><br/>
<s:submit value="submit"></s:submit>
</s:form>
5、为了安全性,struts在没有定义method的时候,是按照post方式提交的,这样子比较安全
6、如果输入的值不符合法,比如说age是int类型的,输入的为String类型,这个时候系统会判断并往Field级别添加Invalid field value for field”age" 这个信息如下:
执行流程:
1)首先进行类型转换
2)然后进行输入效验(执行validate方法)
3)如果在上述过程中出现了任何错误,都不会再去执行execute方法,页面会转向struts.xml中该action的name为input的result所对应的页面。
8.ActionSupport类的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误消息添加到该ArrayList对象中。
9、当调用getActionErrors()方法返回Action级别的错误信息列表时,返回的实际上是集合的一个副本而不是集合本身,因此对集合副本调用clear()方法清除的依旧是副本中的元素而非原集合中的元素,此时原集合中的内容没有收到任何的影响。换句话说,Action级别的错误信息列表对开发者来说是可读的,但不可写
如果说要在validate后将错误信息删除掉,让其即使有错误信息也照样去执行execute方法,则可以调用this.clearAllActionErrors()或者this.clearAllFieldErrors()方法
10、FieldError级别的错误信息底层是通过LinkedHashMap实现的,该Map的key是String类型,value是List<String>类型,这就表示一个Field Name可以对应多条错误信息,这些错误信息都放置在List<String>集合当中。 从而达到同一个错误有多个错误信息
以上所述是小编给大家介绍的Struts中使用validate()输入校验方法详解网站的支持!
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)
![](https://img.aspxhome.com/file/2023/0/60310_0s.jpg)
Android7.0上某些PopuWindow出现显示位置不正确问题的解决方法
c# winform异步不卡界面的实现方法
![](https://img.aspxhome.com/file/2023/7/108667_0s.png)
SpringBoot接口如何对参数进行校验
![](https://img.aspxhome.com/file/2023/5/74895_0s.png)
人脸认证源码faceIdentify详解
C# 输出参数out问题
Android中 动态改变对话框值的方法
Java8新特性:lambda表达式总结
c# winform多线程的小例子
![](https://img.aspxhome.com/file/2023/5/108685_0s.png)
Android 自定义AlertDialog对话框样式
![](https://img.aspxhome.com/file/2023/3/125533_0s.jpg)
Android 性能优化系列之bitmap图片优化
![](https://img.aspxhome.com/file/2023/5/109205_0s.png)
Java中死锁与活锁的具体实现
![](https://img.aspxhome.com/file/2023/4/80844_0s.jpg)
Android中 webView调用JS出错的解决办法
Java并发编程示例(八):处理线程的非受检异常
Android 蓝牙连接 ESC/POS 热敏打印机打印实例(ESC/POS指令篇)
![](https://img.aspxhome.com/file/2023/3/138193_0s.png)
Java虚拟机内存区域划分详解
![](https://img.aspxhome.com/file/2023/6/57516_0s.png)
C#中的委托和事件详解
![](https://img.aspxhome.com/file/2023/2/113702_0s.png)
flutter实现扫码枪获取数据源禁止系统键盘弹窗示例详解
![](https://img.aspxhome.com/file/2023/0/96760_0s.webp)
C语言代码实现三子棋小游戏
![](https://img.aspxhome.com/file/2023/6/112306_0s.jpg)
LinkedBlockingQueue链式阻塞队列的使用和原理解析
![](https://img.aspxhome.com/file/2023/8/79938_0s.png)