- 浏览: 302965 次
最新评论
-
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
nucleus:
为什么都是没有图的。。。。。。。求图片啊
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext -
hunanjun000:
《研磨struts2》第四章 Action 之 4.5 Action的其它重要知识
12.5 加入验证
12.5.1 回顾验证框架
现在可以使用Struts2的验证框架,在真正调用Action的处理方法之前,来验证用户输入的信息是否符合要求。
使用验证框架要考虑四点:
- 在哪儿指定验证信息?最常见的是在Action的同包下建立Action名- validation.xml,但是,现在的UserAction同时负责响应多种请求,所以,要用Action名-别名-validation.xml的方式来指定验证信息。其中的别名就是在struts.xml中注册的<action>元素的name属性。
- 怎么指定验证信息?
l 字段级别:某个字段如果需要验证,而且这个验证不涉及到别的字段的话,就可以使用字段级别验证。
l Action级别:如果某个验证涉及到多个字段,则这个验证可以作为Action级别。
- 如果验证发生错误,跳转到名为input的Result。
- 如何引用验证错误信息?
l 引用字段级别验证可以分为两种情况,如果使用xhtml风格的<s:form/>,验证信息会出现在该字段验证所验证的表单域上方;也可以单独使用<s:fielderror/>标签来引用。
l 引用Action级别验证则必须在页面上使用<s:actionerror/>标签来引用。
有了这么多预备知识,可以分别设计三次表单提交的验证了,验证的要求如下:
- 添加页面:
l 用户编号,只要添了数字就可以。
l 姓名,必填。
l 性别,由于是下拉框,所以不必验证。
l 年龄,必须是18到50之间。
- 修改页面:与添加页面相同,不再赘述。
- 查询页面:
l 用户编号,不必填,所以不必验证。
l 姓名,不必填。
l 性别,由于是下拉框,所以不必验证。
l 年龄范围,最大范围和最小范围单独不必验证,但是如果同时添了,最小范围必须小于等于最大范围。
12.5.2 为添加用户页面添加验证
根据上一节的叙述,现在来为添加用户的页面添加验证。
首先,添加验证文件,在UserAction同包下,放置UserAction-userAdd-validation.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
- <validators>
- <field name="user.userId">
- <field-validator type="int">
- <param name="min">1</param>
- <message>请填入用户编号,整数类型</message>
- </field-validator>
- </field>
- <field name="user.name">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>请输入用户名</message>
- </field-validator>
- </field>
- <field name="user.age">
- <field-validator type="int">
- <param name="min">18</param>
- <param name="max">50</param>
- <message>请输入的用户年龄在${min}到${max}之间</message>
- </field-validator>
- </field>
- </validators>
在上面的验证文件中,有三个字段级别的验证,分别验证了:
- user.userId:必须添入大于1的正整数。
- name:必须填入。
- age:必须是在18和50之间的正整数。
然后,需要为userAdd这个Action,增加名为input的Result,其结果直接返回add.jsp。
最后,应该修改add.jsp来引用验证错误信息。但是,对于添加的验证都是字段级别的验证,所以,在xhtml主题下<s:textfield/>等表单标签会自动在验证不通过的时候把验证错误信息放到表单域的上面。所以,不需要手工修改add.jsp。
好了,所有的修改都做完了,可以开始运行了。在运行之前还要明确一点:验证是发生在类型转换之后的事情,所以如果某个字段的类型转换发生错误的话,虽然验证仍然会发生,但是使用声明字段的默认值进行验证。如果在user.age这个文本框中添了字符串a,那么,在类型转换的时候,a并不能被转换为user.age声明的int属性,因此,类型转换错误,但是,验证还是会发生,只不过使用int的默认值0进行验证。
那么,看一下验证的效果:
图12.7 添加页面验证的效果
在这里,什么都没有输入,直接点击了添加按钮。
12.5.3 为查询用户页面添加验证
查询的时候,只需要验证年龄最大值和年龄最小值同时添的时候,验证是否最小值大于最大值即可。这个验证涉及到了两个字段,所以要使用Action级验证。而且,要比较两个输入值的大小,所以要使用表达式验证,从值栈里取出这两个值来进行验证。
首先,在UserAction的同包下,加入UserAction-userQuery-validation.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
- <validators>
- <validator type="expression">
- <param name="expression">
- <![CDATA[(uqm.age2>0&&uqm.age<=uqm.age2)||uqm.age2==0]]>
- </param>
- <message>您输入的年龄最小值大于最大值</message>
- </validator>
- </validators>
在这里使用了一个表达式验证,由于表达式里设计大于号、小于号,所以放在<![CDATA[表达式]]>里面,防止大于号、小于号被xml转义。
表达式(uqm.age2>0&&uqm.age<=uqm.age2)||uqm.age2==0指定了:如果uqm.age2的值为0,即用户不填年龄最大范围就不用验证;如果填了(uqm.age2>0),则年龄最小范围一定要小于年龄最大范围,如果用户不填的年龄最小范围的话,以默认值0为准。因此,这句表达式指定了如果用户同时添了年龄最大范围和年龄最小范围,只有年龄最小范围小于等于年龄那个最大范围的时候才能通过验证。
然后,需要为userQuery这个Action,增加名为input的Result,其结果直接返回query.jsp。
最后,要在query.jsp上通过<s:actionerror/>标签来显示这个Action级错误信息。
- <%@ page language="java" contentType="text/html; charset=gb2312"
- pageEncoding="gb2312"%>
- <%@taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title><s:text name="query.title"/></title>
- </head>
- <body>
- <s:actionerror/>
- <s:form action="userQuery" method="post">
- <s:textfield name="uqm.userId" key="user.userId" value="0"/>
- <s:textfield name="uqm.name" key="user.name"/>
- <s:select list="sexs" name="uqm.sex" key="user.sex" headerKey="" headerValue="请选择"/>
- <s:textfield name="uqm.age" key="query.age1" value="0"/>
- <s:textfield name="uqm.age2" key="query.age2" value="0"/>
- <s:submit name="" key="query.submit"/>
- </s:form>
- </body>
- </html>
运行测试一下,看看验证的效果:
图12.8 查询页面验证的效果
12.5.4 在验证中引用国际化信息
前面在使用验证框架的时候,出错信息都是直接写在validation文件中的,这些错误信息在真正出错的时候也是要展示给用户看的,所以,既然要做一个国际化的示例,这些错误信息也就应该跟着国际化。
非常简单,只需要为validation文件中的<message>元素设置key属性,同时去掉<message>元素属性中间的文本就可以了。如把UserAction-userQuery-validation.xml改为:
上面的文件中,除了<message>元素去掉文本并设置key属性之外,完全没有变化。当然,还需要在国际化信息文件中添加上”query.error”这个key和相应的值就可以了。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4113.html】
欢迎访问http://sishuok.com获取更多内容
发表评论
-
研磨struts2 目录贴
2012-08-24 12:12 162561.1 《研磨struts2》 第一章 Struts2 ... -
跟着cc学设计 之 研磨设计模式 视频教程 出炉了
2012-08-15 07:16 2研磨设计模式——跟着CC学设计系列精品课程,上线了! ... -
研磨struts2 目录
2012-07-30 21:15 2471.1 《研磨struts2》 第一章 Strut ... -
研磨struts2 目录
2012-07-30 16:54 361.1 《研磨struts2》 第一章 Stru ... -
《研磨struts2》A.2 struts.properties的配置 之 A.2.1 概述
2012-07-09 12:10 2985A.2.1 概述 如果我们希望覆盖在 ... -
《研磨struts2》附录A Struts2的配置 之 A.1 struts.xml的配置
2012-07-09 12:10 2669A.1 struts.xml的配置 A.1.1 ... -
《研磨struts2》第二十一章 零配置 之 21.3 通过注解来实现零配置
2012-07-06 08:07 282221.3 通过注解来实现零配置 21.3.1 ... -
《研磨struts2》第二十一章 零配置 之 21.2 约定大于配置
2012-07-05 10:44 238021.2 约定大于配置 21.2.1 约定 ... -
《研磨struts2》第二十一章 零配置 之 21.1 概述
2012-07-05 10:44 221621.1 概述 21.1.1 零配置概述 在 ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.3 整合Struts2与SiteMesh
2012-07-04 08:15 1991在Struts2中使用SiteMesh ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.2 单独使用SiteMesh
2012-07-03 08:00 199420.2 单独使用SiteMesh 20. ... -
《研磨struts2》第二十章 整合SiteMesh 之 20.1 调整应用的风格
2012-07-03 07:59 179920.1 调整应用的风 ... -
《研磨struts2》19.2 使用execAndWait拦截器模拟进度条 之 19.2.1 模拟长时间运行的Action
2012-07-02 12:24 207619.2.1模拟长时间运行的Action ... -
《研磨struts2》第十九章 进度条 之 19.1 使用“进度条”告知用户进度
2012-07-02 12:23 206419.1 使用“进度条”告知用户进度 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.3 Struts2结合JFreeChart
2012-06-28 12:12 193318.3 Struts2结合JFreeChart ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.2 Struts2插件概述
2012-06-28 12:11 1960Struts2并没有求大求全,企图把所有 ... -
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
2012-06-20 15:48 218818.1 JFreeChart使用 18.1.1概 ... -
研磨struts2(1-10章)电子书下载
2012-06-19 07:30 5970研磨struts2的博客文章 私塾在线学习网 《研 ... -
《研磨struts2》第十七章 防止重复提交 之 17.3 更强大的tokenSession拦截器
2012-06-18 13:46 201117.3 更强大的tokenSession拦截器 ... -
《研磨struts2》第十七章 防止重复提交 之 17.2 使用标签
2012-06-18 13:45 229017.2 使用<s:token/>标签 ...
相关推荐
Struts2整合Spring Hibernate的CRUD实例Struts2整合Spring Hibernate的CRUD实例
结合hibernate和struts2写的crud小demo
Struts2-Crud+JdbcDemo最简单的Struts2+jdbc学习曾删改查程序,适合初学Struts2的朋友们
在Struts 2中实现CRUD.pdf
Java Struts2 实现CRUD,供大家一起共同分享学习。
struts2CRUD
Spring4-Struts2-Hibernate4 CRUD Demo
Spring4-Struts2-Hibernate4 CRUD Demo_2
Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS...
struts标签库,中英文版,数据添删改查,验证等功能,自己写的.
基于mvc模型 利用struts2 实现对单表的CRUD操作
Hibernate+Spring+Struts2+ExtJS开发CRUD功能.docHibernate+Spring+Struts2+ExtJS开发CRUD功能.docHibernate+Spring+Struts2+ExtJS开发CRUD功能.docHibernate+Spring+Struts2+ExtJS开发CRUD功能.doc
ibatis struts2 spring3 mybatis 分页 crud 完整代码
Struts2实现CRUD(增 删 改 查) Maven版; eclipse直接导入使用; 教程地址:http://blog.csdn.net/sky_zhangfan/article/details/1896842
学Java曾经遇到过crud的问题在网上找了半天资料都不是很详细,现在终于会了就把他们总结了一下,希望对everyboday 都有所帮助:
Spring4-Struts2-Hibernate4 CRUD Demo (1)
struts的crud sample demo(struts-crud.war) 可以直接解压查看代码,或者放到工程中运行
struts2 spring 2.5 hibernate3整合 CRUD实例含分页 整合版本struts2 spring 2.5 hibernate3 简单的实现了一个用户的CRUD操作(列表展示有分页版本) 设计到了Validate效验,excel生成下载