struts2校验器例子(struts 2 数据校验,)

:暂无数据 2026-06-28 16:10:03 3

struts2校验器例子(struts 2 数据校验,)

大家好,如果您还对struts2校验器例子不太了解,没有关系,今天就由本站为大家分享struts2校验器例子的知识,包括struts 2 数据校验,的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

struts 2 数据校验,

做成两个方法 一个是验证姓名 一个是验证密码 用到谁就调用谁 这样就可以了
public void validate(){
if(p.getName()==null||p.getName().equals("")){
this.addFieldError("name", "姓名不能为空");
}
}
public void checkPsw(){
if(p.getpassword()==null){
this.addFieldError("password", "密码不能为空");
}
}

struts2 怎么把错误信息输出到标签

下面是我的笔记,复制上来不好看,但是我在笔记软件上整理的很好。

struts2提供了两种校验方式:服务器端校验(更重要)和客户端校验

也分为:validate()校验方法、自定方法的义校验方法、校验框架校验方法三种,其中校验框架校验方法又分为两种:校验器优先校验器和字段优先校验器.(没有业务逻辑的校验)

1、通过validate()校验方法进行校验

   我们只写错误的情况,正确的情况我们不做处理。

注意:struts2当输入校验发生错误的时候,struts2会默认转到一个name为input的这样一个《result》,其实就是当输入错误的时候应该,用户应该尝试着再一次提供输入信息,因此转到input页面。

当发生错误时,struts2给出来各种错误级别的提示:

(1) action级别this.addActionError(anErrorMessage)

addActionError(放的是错误的提示信息),它应该是一个集合,每次都忘这个集合中添加错误信息。

     页面使用《s:actionerror/》标签显示错误信息,指如果存在action的错误信息,就把错误信息显示出来。

         《s:actionerror/》标签还有许多的属性,如cssStyle="";定义错误信息的cssStyle,如:cssStyle="color:red";错误信息为红色.

  (2) 字段级别this.addFieldError(fieldName, errorMessage)

   addFieldError(字段名, 错误提示信息),它应该是一个Map类型,有name和errorMessage两个参数。

   页面使用《s:fielderror cssStyle="color:blue"》《/s:fielderror》 标签来显示错误信息。

   注意:当页面使用的是struts2自己的标签库的时候,它能自动显示field级别的错误信息,是struta2标签自带的功能。

     若不需要这样的功能,把theme的值设为simple即可。

(3) ActionSupport类的addActionError方法的实现:首先创建一个ArrayList对象,然后将错误信息添加到该对象中。

(4) 当调用getActionError()方法返回Action级别的错误信息列表时,返回的实际上是集合的一个副本而不是集合本身,因此对集合副本的调用clear()方法清除的依旧是副本中懂得元素而非原集合中的元素,此时原集合中的内容没有受到任何的影响。换句话说,Action级别的错误信息列别对开发者来说是只读的。

(5) FiledError级别的错误信息底层是用LinkHashMap实现的,该Map的key是String类型,value是List《String》类型,这就表示一个FieldName可以对应多条错误信息,这些错误信息都放置在List《String》集合当中。所以在页面中一个字段可能有多个错误信息。

(6) 判断是否有Action级别或者Field级别的错误根据hasActionError和hasFieldError两个方法的返回值,他们的返回值为布尔型,有错误返回true,没错误返回false。

(7) clearActionErrors();清除所有的Action错误

       clearFieldErrors();清除所有的Filed错误

       clearError();相当于上面两个方法的集合

例子:如下图,age为int类型。birthday和graduate是Date类型

 为什么action级别中会出现age invoked!,birthday invoked!,graduate invoked!三个错误信息?

答:因为我们输入的都是字符串,因此在action中找不到对应的参数类型为String的setAge,setBirthday,setGraduate方法,因此就不能给这三个成员变量赋值,但是age,birthday,graduate在实例化对象时已经有默认的初始化值0,null,null,这样的值均满足if条件判断。

下面的前三个field错误信息是因为我们输入的字符格式错误,它是发生在类型转换阶段,不是发生在输入校验阶段。

知识点:类型转换的错误信息放置到field中。

2、执行流程

  (1)首先进行类型转换

  (2)然后再进行输入校验(执行validate方法)。

  (3)如果上述过程中出现任何错误,都不会再执行execute或自定义方法。会转向struts.xml中对应action中name为input的《result》标签对应的页面。

当field级别错误和action级别错误都没有任何的错误才会执行execute方法。

3、自定义方法的校验方法

   (1) 对于一个自定义的方法来说(如:上面的myExecute()),它的validate()方法在自定义方法之前被调用,即:先进行校验,再执行自定义方法。

   (2) 自定义方法的自定义输入校验方式(action中method所指定的自定义方法)

      public String myExecute() throws Exception{  return SUCCESS;  }  一个自定义方法;

       校验方法的一般格式:public void validateMyExecute(){} 方法名为validate开头,再加上方法的名字,且方法名首字母大写。底层通过反射来实现的。我们称validateMyExecute()为myExecute()的输入校验的方法。

    (3) 当Action中既有自定义方法的校验方法也有validate方法,则先执行自定义方法的校验方法,然后再执行validate方法,若两个校验方法有action或field级别错误,则都不会执行execute或自定义execute方法。

      若把method中自定义方法删掉,则不会执行自定义发的校验方法,而validate方法是会一定会执行的(Action中写了这个方法),因此,validate是用来校验execute方法的。

4、Field级别错误的自定义错误提示

   在Action同级目录下建一个以Action名字命名的properties文件,配置文件名的格式:Action名字.properties

如:RegisterAction.properties

   配置文件内容写法格式:invalid.fieldvalue.字段名=错误提示信息 如:invalid.fieldvalue.age

   其中字段名是Action中的属性名,即当那个属性发生Field错误时所提示的错误信息。

5、Struts2的校验框架(有效的xml文件)

   (1) 校验框架xml文件和被校验的action在同一个包下

   (2) 校验框架xml文件命名格式:Action名字-validation.xml 如:RegisterAction-validation.xml

   (3) 具体来说分为字段优先校验器(field)与校验器优先校验器(validator)

6、字段优先校验器(先有字段再有校验器)

      xwork内置校验器在com.opensympony.xwork2.validator.validators目录下的default.xml文件中。

      有以下几中校验器分类:

      required、requiredstring 、int、long、short、double、date、fieldexpression、expression、email

      url、visitor、conversion、stringlength、regex、conditionalvisitor

   (5) Struts2的校验框架xml文件标签及标签属性分析

     ① 《field name=""》《/field》 校验器类型,name属性值为Action中待校验的属性值(成员变量) 

         如:《field name="username"》《/field》

     ②《field-validator type=""》《/field-validator》校验规则或校验器,在《field》里面可以有多个《field-validator》

        如:《field-validator type="requiredstring"》《/field-validator》 指username只能为字符串,不能为空

            若:type="required"  指除了string之外的其他类型

                type="stringlength"  指字符串的长度

                type="int"   指待检验的值必须为int类型

                type="date"  指定带检验的值为date类型,且《param》《/param》标签中的字符串值必须写成日期的样                                式,因为《param》标签中我们写的是字符串的日期样式,而在xmwork内部校验器的对应属                              性是Date类型,所以这里用到了类型转换器。

    ③ 《message》username《/message》当发生错误的时候的提示信息标签

        如:《message》username can’t be blank!《/message》

        《message》标签属性key  如:《message key="username.invalid"》《/message》

        注意:这个key变量的值是在配置文件中的,配置文件和Action在同一包下

              书写格式:英文 package_en_US.properties  中文 package_zh_CN.properties

                          package.properties为默认的资源文件,当所要找的资源文件不存在时找默认的资源文件。

           配置文件中的key和message中的key名字必须一样,若不一样,则会把message中的key值作为错误提示信息显            示在页面。

        *. 通过修改浏览器显示语言的首选项来切换浏览器使用什么语言显示页面内容。

     ④ 《param name=""》《/param》 《param name=""》《/param》  是《field-validator》子标签,可选.

       param中的属性名都必须和源代码对应的类中的属性名一致,这样才能正确赋值。

        如:《param name="minLength"》4《/param》设置字符串最大长度 

            《param name="maxLength"》6《/param》设置字符串最小长度

            《param name="trim"》false《/param》 设置是否去掉字符串两边的空格

          拿minLength和maxLength的引用:    

          ${minLength}取得是minLength的值,${maxLength}${minLength}取得是maxLength的值 

          如:《message》username should be between ${minLength} and ${maxLength}!《/message》 

7、校验器优先校验器(先有校验器再有字段)

     《validator type="requiredstring"》  --》这是一个校验器

     《param name="fieldName"》username《/param》 --》定义待校验的字段名,这里的name值是固定为fieldName

     《/validator》

   校验器优先校验器和字段优先校验器可以混合使用.

struts2输入校验总结:struts2框架校验执行的先后顺序:

                      1) 首先进行类型转换(只有类型转换好后才能进行校验)

                      2) 首先执行校验框架的校验方法(xml文件)

                      3) 执行自定义方法的校验方法

                      4) 执行validate()校验方法

      当validate()方法执行完以后,struts2框架才会检查Field级别或者Action级别有没有任何的错误消息,当出现任何一条错误消息的时候,struts2都不会执行自定义的execute方法和execute()方法,进而转向struts.xml中《result》标签中name为input所对应的页面。 

    推荐使用validate()校验方法。                          

struts2怎么验证是否是数字

其实不用自己写代码,你的sturs默认继承了default-struts.xml中会配置类型转化器,如果你的action中要获取一个整型的数据,但是你在页面上输入一个字母或其他符号的话,类型转化器就会在fielderror中添加错误,然后返回INPUT字符串,你只要在struts.xml中设置《result name="input"》/XXX.jsp《/result》就可以,XXX.jsp是你一开始的页面。当然你也可以不用struts自带的功能,比如说这样的校验工作交给js就行了,如果你不嫌麻烦的话,可以在execute()手动写校验代码,或者在action中重写validate()方法,在该方法中写校验代码,但是要注意一些的你拦截器栈的配置,具体的情况可以来问我

struts2标签的js校验,最后一个td含一个日历窗口,需要校验如果输入的时间小于天时间,做出提示

onfocus="WdatePicker()"中WdatePicker()可以传递参数,限制日期滴。
比如:WdatePicker({dateFmt:’yyyy-MM-dd’,minDate:’2010-5-7’,maxDate:’2013-5-7’})
限制的日期范围是2010年5月7日至2013年5月7日。你也可以根据自己的需要传递不同的参数,参数个数也可以根据自己的需要来定。希望对你有帮助!

struts2中我的birthday在javabean中的类型是String,怎么在校验器中做日期校验

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public void verifyBirthday(String birthday) throws ParseException {
SimpleDateFormat tool = new SimpleDateFormat("yyyy-MM-dd");
Date minDate = tool.parse("1900-01-01");
Date maxDate = tool.parse("2050-01-01");
Date _birthday = tool.parse(birthday);
if( _birthday.getTime()》maxDate.getTime() || _birthday.getTime()《minDate.getTime() )
throw new RuntimeException("生日必须{min}{max}之间");
}
}

关于使用struts2校验框架进行校验的问题

一、struts校验框架的执行原理是,执到action时,不执行里面的方法,转而会去执行校验器,执行完后返回执行action里的方法。校验器分为字段校验和非字段校验,本人建议用字段校验,较直观也好理解。以下是字段校验的配置:
给action的字段配置校验器,比如说login.java里有username和pwd字段,那么配置login-validation.xml进行两个字段的校验:
《validators》
《field name="username"》//要校验的字段名(密码校验把此改为pwd即可)
《field-validator type="requiredstring"》//不许为空
《message》no null《/message》//错误提示
《/field-validator》
《/field》
二、struts2配置文件
《struts》
《package name="default" extends="struts-default"》
《action name="LoginAction" class="包名.LoginAction》
《result name="success"》/ok.jsp《/result》
《result name="error"》/error.jsp《/result》
《/action》
《/package》
《/struts》
仅供参考

struts2校验的问题

这个是由于struts2中的action是有状态的。
在struts1中,form与action是分开的,也就是说在struts1中的action中是没有属性的,是无状态的。但在struts2中,action中是有属性的(其实struts1与struts2没什么关系),所以struts2是有状态的。所以当只使用struts2时,当用到它的action时是每次都new一个新的。但是,spring管理struts2的action时,由于spring管理的bean都是单例的,所以action只生成一次,并且错误消息也不会自动删除,而是一次次的累加。
解决办法:在spring管理的action中,加入一个属性。
《bean id="***Action" class="*.*.*.***Action" scope="prototype"》
注:后面的scope="prototype"就是说在这个bean中是否使用单例模式,默认的值是:singleton,表示的使用。而prototype是不使用的意思。所以这里我们要使用prototye就可以了。
这样就应该差不多了,你可以试试。我们可以再探讨。

如何验证struts2 s2-020

在Action中做校验时,可以直接在execute()方法中进行一些简单的校验
但Actionsupport类给我们提供了方法validate(),使我们的校验更加清晰简单
当我们重写此方法时对应的struts.xml的result也要写上对应的
《result name="input"》
/input.jsp
《/result》
经过测试,大致是这样的,validate方法执行校验不成功时后直接返回结果INPUT而不去执行execute方法了
当校验成功时才去执行execute方法,可以返回结果SUCCESS

关于Struts2输入校验的问题!

如果age属性是直接定义在action类中的话,属性文件应这么写,invalid.fieldvalue.age=age should be a integer,如果age是定义在一个JavaBean中,比如User中有age属性,而在action类中引用的是User user对象的话,那么属性文件应这么写,invalid.fieldvalue.user.age=age should be a integer

struts2验证框架 如何验证全角、半角

首先我们需要继承FieldValidatorSupport类,然后我们重写他的validate方法
validate
package com.opensymphony.xwork2.validator.validators;
import com.opensymphony.xwork2.validator.ValidationException;
public class ListPropertyValidator extends FieldValidatorSupport {
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();//userList.username
Object value = this.getFieldValue("userList.username", object);//here is very important
System.out.println(value);
if ((minLength 》 -1) && (val.length() 《 minLength)) {
addFieldError(fieldName, object);
} else if ((maxLength 》 -1) && (val.length() 》 maxLength)) {
addFieldError(fieldName, object);
}
}
}
上面的过程还不完整,需要通过一种
Action code:
public class DemoAction extends ActionSupport {
private List《User》 userList;
}
User code:
public class User implements Serializable {
private String username;
private String password;
private String gender;
//省略了getter, setter
}
Xml Configuration:
《?xml version="1.0" encoding="UTF-8"?》
《!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
""》
《/validators》
《field name="userList.username"》
《field-validator type="listproperty"》//这里需要设计出一种比较优雅的配置方式来进行验证集合类的元素
《message key="devices.add.guest.guestid.required"》《/message》
《/field-validator》
《/field》
《/validators》
追加默认的验证器:
《?xml version="1.0" encoding="UTF-8"?》
《!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
""》
《!-- START SNIPPET: validators-default --》
《validators》
《validator name="listproperty" class="com.opensymphony.xwork2.validator.validators.ListPropertyValidator"/》
《/validators》

关于struts2校验器例子和struts 2 数据校验,的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

struts2校验器例子(struts 2 数据校验,)

本文编辑:admin

更多文章:


androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

本篇文章给大家谈谈androidapp源码免费下载,以及如何实现APK的反编译得到APK的源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 18:00

security的反义词(risk的反义词)

security的反义词(risk的反义词)

大家好,今天小编来为大家解答以下的问题,关于security的反义词,risk的反义词这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 15:40

二郎神杨戬简笔画(二郎神怎么画)

二郎神杨戬简笔画(二郎神怎么画)

本篇文章给大家谈谈二郎神杨戬简笔画,以及二郎神怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:50

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

大家好,关于service pack 3很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思的知识点,相信应该可以解决大家的一

2026年9月22日 10:20

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

本篇文章给大家谈谈html代码怎么写大佬教程,以及html网页的题来个大佬,写代码,题目在图上对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:10

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

本篇文章给大家谈谈结构体内又一个struct,以及c++ 在结构体中再嵌入一个结构体如何调用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 09:40

next是什么意思英语(next是什么单词)

next是什么意思英语(next是什么单词)

本篇文章给大家谈谈next是什么意思英语,以及next是什么单词对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 07:50

美国参议院人数(美国每个州的议员人数取决于什么)

美国参议院人数(美国每个州的议员人数取决于什么)

大家好,今天小编来为大家解答以下的问题,关于美国参议院人数,美国每个州的议员人数取决于什么这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 05:20

高中信息技术python(高考信息技术用的是什么语言)

高中信息技术python(高考信息技术用的是什么语言)

今天给各位分享高考信息技术用的是什么语言的知识,其中也会对高考信息技术用的是什么语言进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月22日 02:50

cocos creator中文(cocoscreator和cocoscreator3d的区别)

cocos creator中文(cocoscreator和cocoscreator3d的区别)

各位老铁们好,相信很多人对cocos creator中文都不是特别的了解,因此呢,今天就来为大家分享下关于cocos creator中文以及cocoscreator和cocoscreator3d的区别的问题知识,还望可以帮助大家,解决大家的

2026年9月22日 02:30

最近更新

洛宁网附近有什么好玩的?
2026-09-22 19:45:27 浏览:0
如何为初创企业创建低成本网站
2026-09-22 19:44:56 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:22
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:14
oppo a9拆机教程(oppoa9拆机教程)
2026-06-13 10:40:02 浏览:12
标签列表