今天遇到了这样的问题:我的jsp页面、web.xml、struts.xml、UserAction-validation.xml等内容写的都正确,就是无法使用校验器!在网上找了半天就是不出来,迫不得已我查看了架包问题,在我的测试项目里是xwork-core-2.2.1.jar,而在我实际的项目中是xwork-core-2.3.12.jar,果断去掉了高版本的架包,使用2.2.1的版本;可是问题又出来了,我的项目报错了,说是少架包,我有把2.3.12版加上了,然后试运行,结果OK!不知道是不是把validator给剥离出来了,就去官网看看去吧。

项目如下:

1、jsp中

 <h2>请输入您的注册信息</h2>
<s:fielderror/>
<s:form action="user_regist">
<s:textfield name="user.userName" label="用户名"/>
<s:textfield name="user.password" label="密码"/>
<s:textfield name="user.id" label="type"/>
<s:submit value="注册" /><s:reset value="重填"/>
</s:form>

2、action中:

 public class UserAction extends ActionSupport {
private User user; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}

3、struts.xml中

 <action name="*" class="com.action.UserAction">
<!-- 类型转换失败、输入校验失败,转入该页面 -->
<result name="input">/regist.jsp</result>
<result>/show.jsp</result>
</action>

4、UserAction-validation.xml:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<!-- 校验Action的name属性 -->
<field name="user.userName">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入名字</message>
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>您输入的用户名只能是字母和数字
,且长度必须在4到25之间</message>
</field-validator>
</field>
<!-- 校验Action的pass属性 -->
<field name="user.password">
<!-- 指定pass属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>必须输入密码</message>
</field-validator>
<!-- 指定pass属性必须满足匹配指定的正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>您输入的密码只能是字母和数字
,且长度必须在4到25之间</message>
</field-validator>
</field>
</validators>

二、我又实现了这样的功能:我的action中有很多的处理逻辑,我在struts.xml中只配置了一个action,也就是使用了使用了动态结果配置:

<action name="user_*" class="action.UserAction" method="{1}">;那么在验证错误时,由于validator文件默认有一个input返回结果值,我怎样才能也配置为动态的返回页面呢?

我使用了如下方法:

<action name="user_*_*" class="action.UserAction" method="{1}">
        <result name="input">/{2}.jsp</result>

之后写在action目录下的validator文件改为:action名字 + -action别名 + -validation.xml

action的别名在此即为:"user_*_*"的实际的名字,在我的系统里是:UserAction-user_regist_regist-validation.xml

下面的是从别人那里copy过来的,个人觉得比较好,收藏一下

一. 手动输入完成校验

1.普通的处理方式:只需要在action中重写validate()方法

2.一个action对应多个逻辑处理方法:指定校验摸个特定方法的方式:

重写validateXxxx()方法。Eg:如果,只校验login方法,则只需重写validateLogin().

二. 输入校验流程:

1. 类型转换器负责对字符串的请求参数执行类型转换。并将这些值设置成Action的属性值。

2. 转换过程中若出现异常,则将异常信息保存到ActionContext中,conversionError拦截器将其封装到fieldError中。

3. 通过反射调用validateXxx()方法。

4. 调用validate().

5. 如果未出现异常,则转入用户请求的处理方法,如果出现异常,则转入inout视图所指定的视图资源(所以,对于验证的方法,必须要在配置文件中为其指定input)。

三. 基于验证框架的输入校验

1. 编写校验配置文件:命名规则:action类名-validatin.xml.

2. 一个action对应多个逻辑处理方法:指定校验摸个特定方法的方式:

action类名-name属性名-validatin.xml.(name属性名:在strtus配置文件中的)

3. 配置文件存放位置:放在与Action相同的文件夹内。

4. 验证规则:先加载action类名-validatin.xml,

然后加载action类名-name属性名-validatin.xml文件。

5. 校验器的配置风格:两种:字段校验器,非字段校验器。

字段校验器配置格式:

<field name="被校验的字段">

<field-validator type="校验器名">

<!--此处需要为不同校验器指定数量不等的校验规则-->

<param name="参数名">参数值</param>

....................

<!--校验失败后的提示信息,其中key指定国际化信息的key-->

<message key="I18Nkey">校验失败后的提示信息</message>

<!--校验失败后的提示信息:建议用getText("I18Nkey"),

否则可能出现Freemarker template Error-->

</field-vallidator>

<!-- 如果校验字段满足多个规则,下面可以配置多个校验器-->

</field>

非字段校验器配置格式:

<validator type="校验器名">

<param name="fieldName">需要被校验的字段</param>

<!--此处需要为不同校验器指定数量不等的校验规则-->

<param name="参数名">参数值</param>

<!--校验失败后的提示信息,其中key指定国际化信息的key-->

<message key="I18Nkey">校验失败后的提示信息</message>

<!--校验失败后的提示信息:建议用getText("I18Nkey"),

否则可能出现Freemarker template Error-->

</validator>

非字段校验:先指定校验器:由谁来校验,来校验谁!

字段校验器:先指定校验的属性:我来校验谁,由谁来校验!

使用Struts2校验器的更多相关文章

  1. struts2校验器规范错误解决

    今天struts2的校验器的配置文件文件头出现了错误,配置如下: <!DOCTYPE validators PUBLIC        "-//OpenSymphony Group// ...

  2. 使用 Struts2 校验器校验用户注册信息

    基于验证框架的输入校验 一.创建一个struts2项目testValidators.Struts2 初体验:http://www.cnblogs.com/likailan/p/3280820.html ...

  3. 使用 Struts2 校验器校验用户注册信息的例子

    转自:https://blog.csdn.net/jin2005006/article/details/53999562 基于验证框架的输入校验 一.创建一个struts2项目testValidato ...

  4. Struts2笔记——Action校验器

    在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验.  对于输入校验struts2提供了两种实现方法: 1.采用手工编写代码实现. 2.基于XML配置 ...

  5. Struts2内建校验器(基于校验框架的文件校验)

    位于xwork-2.0.4.jar压缩包中( com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框 ...

  6. Struts2内置校验器——完整实例代码

    一.校验器的配置风格 1.字段校验器: <field name="被校验的字段"> <field-validator type="校验器名"& ...

  7. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  8. struts2校验总结

    struts校验框架提供两种校验:客户端校验和服务端校验.它们都是主要检查浏览器输入数据是否合法的校验器. 服务端校验 服务端校验是在服务器上检查输入数据,它的实现方法是重写validate()方法. ...

  9. 浅谈Struts2拦截器的原理与实现

    拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...

随机推荐

  1. C++ 头文件系列 (bitset)

    简介 该头文件有关位集,实际上是vector 位 位本质上对应bool的概念,只有0或1,true或false两种对立的值. 但很可惜,字节才是机器上最小的存储单元,所以bool基本上是由一个字节大小 ...

  2. Swift 2.0 自定义cell和不同风格的cell

    昨天我们写了使用系统的cell怎样创建tableView,今天我们再细分一下,就是不同风格的cell,我们怎写代码.先自己创建一个cell,继承于UItableviewcell 我们看看 cell 里 ...

  3. C语言 extern3 全局变量的使用

    和函数的全局使用极其类似: 第一种方法,也是最简单的: 在 first.h 中定义, ; 在对应的first.c中使用: #include "first.h" #include & ...

  4. beautifulsoup 获取a(tag)的属性href

    一开始使用使用attrs(“href”) 出现错误TypeError: 'dict' object is not callable 由于attrs字典类型 atrrs["href" ...

  5. 可能是一份没什么用的爬虫代理IP指南

    写在前面 做爬虫的小伙伴一般都绕不过代理IP这个问题. PS:如果还没遇到被封IP的场景,要不就是你量太小人家懒得理你,要不就是人家压根不在乎... 爬虫用户自己是没有能力维护一系列的代理服务器和代理 ...

  6. [Netty] - Netty入门(最简单的Netty客户端/服务器程序)

    Java中的NIO是一种解决阻塞式IO问题的基本技术,但是NIO的编写对java程序员是有比较高的要求的.那么Netty就是一种简化操作的一个成熟的网络IO编程框架.这里简单介绍一个程序,代码是< ...

  7. 丘吉尔,最后一次演讲-Never Give Up

    丘吉尔一生最精彩的演讲,也是他最后一次演讲.在剑桥大学的一次毕业典礼上,整个会堂有上万个学生,他们正在等待丘吉尔的出现.正在这时,丘吉尔在他的随从陪同下走进了会场并慢慢走向讲台,他脱下他的大衣交给随从 ...

  8. 【openstack N版】——手把手教你制作生产环境镜像

    一.CentOS7镜像制作 1.1创建CentOS7虚拟机 1.1.1创建虚拟磁盘 #注:尽量将虚拟机创建在控制节点,以便于将镜像上传至glance [root@linux-node1 ~]# qem ...

  9. js:如何在循环异步请求的每次返回中添加想要的值

    先看一个场景 var arr = ["a","b","c"]; for (var i in arr) {         $.get(&qu ...

  10. Unity3d场景漫游---iTween实现

    接触U3D以来,我做过的场景漫游实现方式一般有以下几种: Unity3d中的Animation组件,通过设置摄像机的关键点实现场景漫游 第一人称或第三人称控制器 编写摄像机控制脚本 iTween iT ...