`

《研磨struts2》第十二章 CRUD综合运用 之 12.5 加入验证

 
阅读更多

 

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:

 

java代码:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator 1.0//EN"        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  4.           
  5. <validators>  
  6.     <field name="user.userId">  
  7.         <field-validator type="int">  
  8.             <param name="min">1</param>  
  9.             <message>请填入用户编号,整数类型</message>  
  10.         </field-validator>  
  11.     </field>  
  12.     <field name="user.name">  
  13.         <field-validator type="requiredstring">  
  14.             <param name="trim">true</param>  
  15.             <message>请输入用户名</message>  
  16.         </field-validator>  
  17.     </field>  
  18.     <field name="user.age">  
  19.         <field-validator type="int">  
  20.             <param name="min">18</param>  
  21.             <param name="max">50</param>  
  22.             <message>请输入的用户年龄在${min}到${max}之间</message>  
  23.         </field-validator>  
  24.     </field>  
  25. </validators>  

在上面的验证文件中,有三个字段级别的验证,分别验证了:

  • user.userId:必须添入大于1的正整数。
  • name:必须填入。
  • age:必须是在18和50之间的正整数。

然后,需要为userAdd这个Action,增加名为input的Result,其结果直接返回add.jsp。

 

java代码:
  1. <action name="userAdd" class="cn.javass.crud1.action.UserAction" method="add">  
  2.     <result name="toList">/jsp/list.jsp</result>  
  3.     <result name="input">/jsp/add.jsp</result>  
  4. </action>  

最后,应该修改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:

 

java代码:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator 1.0//EN"        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  4.           
  5. <validators>  
  6.     <validator type="expression">  
  7.         <param name="expression">  
  8.             <![CDATA[(uqm.age2>0&&uqm.age<=uqm.age2)||uqm.age2==0]]>  
  9.         </param>  
  10.         <message>您输入的年龄最小值大于最大值</message>  
  11.     </validator>  
  12. </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。

 

java代码:
  1. <action name="userQuery" class="cn.javass.crud1.action.UserAction" method="query">  
  2.     <result name="toList">/jsp/list.jsp</result>  
  3.     <result name="input">/jsp/query.jsp</result>  
  4. </action>  

最后,要在query.jsp上通过<s:actionerror/>标签来显示这个Action级错误信息。

 

java代码:
  1. <%@ page language="java" contentType="text/html; charset=gb2312"  
  2.     pageEncoding="gb2312"%>  
  3. <%@taglib prefix="s" uri="/struts-tags" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  8. <title><s:text name="query.title"/></title>  
  9. </head>  
  10. <body>  
  11. <s:actionerror/>  
  12. <s:form action="userQuery" method="post">  
  13.     <s:textfield name="uqm.userId" key="user.userId" value="0"/>  
  14.     <s:textfield name="uqm.name" key="user.name"/>  
  15.     <s:select list="sexs" name="uqm.sex" key="user.sex" headerKey="" headerValue="请选择"/>  
  16.     <s:textfield name="uqm.age" key="query.age1" value="0"/>  
  17.     <s:textfield name="uqm.age2" key="query.age2" value="0"/>  
  18.     <s:submit name="" key="query.submit"/>  
  19. </s:form>  
  20. </body>  
  21. </html>  

运行测试一下,看看验证的效果:

 

图12.8 查询页面验证的效果

12.5.4  在验证中引用国际化信息

前面在使用验证框架的时候,出错信息都是直接写在validation文件中的,这些错误信息在真正出错的时候也是要展示给用户看的,所以,既然要做一个国际化的示例,这些错误信息也就应该跟着国际化。

非常简单,只需要为validation文件中的<message>元素设置key属性,同时去掉<message>元素属性中间的文本就可以了。如把UserAction-userQuery-validation.xml改为:

 

java代码:
  1. <validators>  
  2.     <validator type="expression">  
  3.         <param name="expression">  
  4.             <![CDATA[(uqm.age2>0&&uqm.age<=uqm.age2)||uqm.age2==0]]>  
  5.         </param>  
  6.         <message key="query.error"></message>  
  7.     </validator>  
  8. </validators>  

上面的文件中,除了<message>元素去掉文本并设置key属性之外,完全没有变化。当然,还需要在国际化信息文件中添加上”query.error”这个key和相应的值就可以了。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4113.html

欢迎访问http://sishuok.com获取更多内容

 

3
6
分享到:
评论

相关推荐

    带struts2和hibernate的crud小demo

    这个"带Struts2和Hibernate的CRUD小Demo"是一个实用的学习资源,它演示了如何将这两个框架集成以实现数据的创建、读取、更新和删除(CRUD)操作。 首先,Struts2是一个开源的MVC(Model-View-Controller)框架,它...

    strutsCRUD1.rar_crud struts_struts1 crud_strutsCRUD1

    2. **strutsCRUD**:这是一个目录,可能包含了项目的源代码、配置文件(如struts-config.xml)、JSP页面和其他相关资源。在这个目录下,你可能会找到Action类、ActionForm类、JSP文件以及配置文件。 在strutsCRUD...

    Java Struts2 实现CRUD

    Struts2是Java Web开发中一个非常流行的MVC框架,它极大地简化了Web应用程序的构建,特别是对于实现CRUD(创建、读取、更新、删除)操作。在本篇文章中,我们将深入探讨如何使用Java Struts2框架来完成这些基本的...

    在Struts 2中实现CRUD

    ### Struts 2中实现CRUD操作详解 #### 一、引言 CRUD操作是软件开发中最常见的数据处理方式之一,它代表了对数据进行的四种...希望本文能帮助读者更好地理解Struts 2中的CRUD操作实现方法,并能在实际项目中灵活运用。

    Struts2-Crud+JdbcDemo最简单的Struts2+jdbc学习曾删改查程序

    这个"Struts2-Crud+JdbcDemo"项目是一个基础的学习示例,涵盖了如何使用Struts2和JDBC进行基本的CRUD(创建、读取、更新和删除)操作。 首先,我们来详细了解一下Struts2的核心概念: 1. **Action类**:在Struts2...

    struts2CRUD

    Struts2 CRUD是一个基于Apache Struts2框架实现的创建、读取、更新和删除(Create, Read, Update, Delete)操作的示例项目。这个项目主要用于演示如何在Web应用程序中使用Struts2来处理基本的数据操作。Struts2是...

    Struts2整合Spring Hibernate的CRUD实例

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面上发挥着重要作用。Struts2作为MVC(Model-View-Controller)框架,负责处理请求和展示视图;Spring则是一个全面的后端解决...

    Spring4-Struts2-Hibernate4 CRUD Demo_3

    【Spring4-Struts2-Hibernate4 CRUD Demo_3】是一个综合性的开发示例,它展示了如何在Java Web应用程序中整合三大主流框架:Spring 4、Struts 2和Hibernate 4来实现CRUD(创建、读取、更新、删除)操作。这个Demo...

    struts2 CRUD

    Struts2 CRUD是一个典型的Java Web开发中的概念,它涉及到Model-View-Controller(MVC)设计模式的应用,以及使用Struts2框架实现对单一数据库表的创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)功能。...

    Spring4-Struts2-Hibernate4 CRUD Demo_5

    【Spring4-Struts2-Hibernate4 CRUD Demo_5】是一个综合性的开发示例,它展示了如何在Java Web应用程序中整合三大主流框架:Spring 4、Struts2和Hibernate4,进行基本的数据创建(Create)、读取(Read)、更新...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    Struts2_CRUD.rar_Struts2_CRUD_Struts2的增改删查 操作 示例_struts2_struts2

    2. **ActionForm或POJO**:在早期的Struts2版本中,ActionForm用于收集和验证表单数据。现在,更常见的是直接使用简单的Java POJO对象来承载请求参数,减少了额外的封装层,简化了代码。 3. **JSP页面**:用于展示...

    struts2CRUD-2

    Struts2 CRUD-2 是一个基于Struts2框架实现的简单数据操作示例,主要涵盖了创建(Create)、读取(Read)、更新(Update)和删除(Delete)这四个数据库操作的基本功能。Struts2是一个非常流行的Java Web开发框架,...

    struts2-crud.zip_DEMO_Java web CRUD demo_struts2 CRUD_struts2 de

    3. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它们按照预定义的顺序在Action调用前后执行,可以实现事务管理、权限验证等功能。 4. **Result类型**:Action执行后,会返回一个Result,决定如何...

    struts_crud

    4. **配置文件**:Struts框架的配置文件(如struts-config.xml或struts2的struts.xml)定义了Action类、Action的输入和输出、以及Action与视图之间的映射关系。在CRUD应用中,我们需要为每个CRUD操作配置相应的...

    struts2.0拦截器、crud例子与用法

    本文将详细解析Struts2中的拦截器(Interceptor)、CRUD操作以及Action的执行流程。 首先,让我们聚焦于Struts2的拦截器机制。拦截器是Struts2的核心组件,它们在Action执行前后运行,提供了AOP(面向切面编程)的...

    Struts2实现CRUD(增删改查)Maven版

    Struts2实现CRUD(增 删 改 查) Maven版; eclipse直接导入使用; 教程地址:http://blog.csdn.net/sky_zhangfan/article/details/1896842

    Struts实现CRUD操作

    在本教程中,我们将探讨如何利用Struts实现CRUD(创建、读取、更新和删除)操作,这是一些基本但至关重要的数据库交互功能。 首先,理解Struts框架的核心组件至关重要。ActionServlet是Struts的入口点,它处理HTTP...

Global site tag (gtag.js) - Google Analytics