`
froast
  • 浏览: 254176 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在struts2.0中对指定方法进行validation验证

阅读更多

最近公司项目使用struts2.0, 在用到struts2.0中的validation框架时,当为一个Action指定Actionname-validation.xml验证规则后,validation interceptor会为该Action中的每个方法都执行validation,这样很烦。

(1)有一种解决方法是为其余不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation。

(2)另一种方法是今天在mailing list中看到的,为Action中的指定方法指定一个验证规则,命名为Actionname-alias-validation.xml,在struts2.0自带的mailreader例子中有使用,可以参考。

如mailreader的例子中,struts中的配置如下:

xml 代码
  1. <package name="subscription" namespace="/" extends="mailreader-support">  
  2.   
  3.         <global-results>  
  4.             <result name="input">/Subscription.jspresult>  
  5.             <result type="redirect-action">Registration_inputresult>  
  6.         <global-results>  
  7.   
  8.         <action name="Subscription_save" method="save" class="mailreader2.Subscription">  
  9.             <interceptor-ref name="user-submit" />  
  10.         <action>  
  11.   
  12.         <action name="Subscription_*" method="{1}" class="mailreader2.Subscription" />  
  13.   
  14.     <package>  

然后在mailreader2包下有一个Subscription类,及一个Subscription-Subscription_save-validation.xml文件,还有一个Subscription-validation.xml文件。

注意:Subscription_save是在struts 中定义的action的name,在struts中还要指定Subscription_save所对应的方法。

(3)还有一种方法,也是我认为最简单的方法就是如下配置:

xml 代码
  1. <package name="subscription" namespace="/" extends="mailreader-support">      
  2.       
  3.         <global-results>      
  4.             <result name="input">/Subscription.jspresult>      
  5.             <result type="redirect-action">Registration_inputresult>      
  6.         <global-results>      
  7.       
  8.         <action name="Subscription" class="mailreader2.Subscription">      
  9.               <interceptor-ref name="defaultStack">  
  10.                  <param name="validation.excludeMethods">*param>  
  11.                  <param name="validation.includeMethods">需要验证的方法名称,以逗号分隔param>  
  12.             interceptor-ref>  
  13.         <action>      
  14.     <package>      
分享到:
评论
8 楼 cumt_TTR 2012-09-22  
第三种方法是不是要写一个拦截器继承MethodFilterInterceptor ??
7 楼 kevin002 2007-08-23  
Puras 写道
kevin002 写道
你好,有一个问题我想请教一下,
<action name="list" class="DetailAction">
<result>detail.jsp</result>
</action>
<action name="add" class="DetailAction" method="add">
<result name="input">photo_detail?pid=${pid}</result>          
<result type="redirect-action">photo_detail?pid=${pid}</result>
</action>

我定义了一个DetailAction-add-validation.xml文件来对输入的评论进行验证.如果验证失败返回这个页面,但是什么错误提示也不会显示

<action name="add" class="DetailAction" method="add">
<result name="input">detail.jsp</result>          
<result type="redirect-action">photo_detail?pid=${pid}</result>
</action>
如果这样写的话,错误提示是可以显示的,但是文章内容就不会显示出来了,只有一个评论框,有什么好的办法没有呢?


我也遇到过这种问题
是加了一个<interceptor-ref name="prepare" />拦截器
不知道还有没有更好的解决办法.
我加上<interceptor-ref name="prepare" />拦截器之后,
<result name="input">detail?pid=${pid}</result>
这句代码里面的pid值得不到了,不知道是怎么回事了.
6 楼 Puras 2007-08-23  
kevin002 写道
你好,有一个问题我想请教一下,
<action name="list" class="DetailAction">
<result>detail.jsp</result>
</action>
<action name="add" class="DetailAction" method="add">
<result name="input">photo_detail?pid=${pid}</result>          
<result type="redirect-action">photo_detail?pid=${pid}</result>
</action>

我定义了一个DetailAction-add-validation.xml文件来对输入的评论进行验证.如果验证失败返回这个页面,但是什么错误提示也不会显示

<action name="add" class="DetailAction" method="add">
<result name="input">detail.jsp</result>          
<result type="redirect-action">photo_detail?pid=${pid}</result>
</action>
如果这样写的话,错误提示是可以显示的,但是文章内容就不会显示出来了,只有一个评论框,有什么好的办法没有呢?


我也遇到过这种问题
是加了一个<interceptor-ref name="prepare" />拦截器
不知道还有没有更好的解决办法.
5 楼 kevin002 2007-08-23  
不好意思,上面写的有些问题,下面的才是.

你好,有一个问题我想请教一下,
<action name="detail" class="DetailAction">
<result>detail.jsp</result>
</action>
<action name="add" class="DetailAction" method="add">
<result name="input">detail?pid=${pid}</result>
<result type="redirect-action">detail?pid=${pid}</result>
</action>

我定义了一个DetailAction-add-validation.xml文件来对输入的评论进行验证.如果验证失败返回这个页面,但是什么错误提示也不会显示

<action name="add" class="DetailAction" method="add">
<result name="input">detail.jsp</result>
<result type="redirect-action">detail?pid=${pid}</result>
</action>
如果这样写的话,错误提示是可以显示的,但是文章内容就不会显示出来了,只有一个评论框,有什么好的办法没有呢?
4 楼 kevin002 2007-08-23  
你好,有一个问题我想请教一下,
<action name="list" class="DetailAction">
<result>detail.jsp</result>
</action>
<action name="add" class="DetailAction" method="add">
<result name="input">photo_detail?pid=${pid}</result>          
<result type="redirect-action">photo_detail?pid=${pid}</result>
</action>

我定义了一个DetailAction-add-validation.xml文件来对输入的评论进行验证.如果验证失败返回这个页面,但是什么错误提示也不会显示

<action name="add" class="DetailAction" method="add">
<result name="input">detail.jsp</result>          
<result type="redirect-action">photo_detail?pid=${pid}</result>
</action>
如果这样写的话,错误提示是可以显示的,但是文章内容就不会显示出来了,只有一个评论框,有什么好的办法没有呢?
3 楼 jiajv_ 2007-08-01  
不错的
2 楼 hesy_007 2007-08-01  
woshiwuji 写道
你好!
有一种问题向你请教一下,
如果使用通配符的配置,
只有一个<result name='input'>/inputpage.jsp</result>
返回结果。
如果不同的action方法想返回不同的页面,是不是就不能能做了呢?


你可以采用Wildcard Mappings的方式
例:
<action name="/edit*" class="org.apache.struts.webapp.example.Edit{1}Action">
    <result name="failure" path="/mainMenu.jsp"/>
    <result name="input" path="/{1}.jsp"/>
</action>
1 楼 woshiwuji 2007-07-28  
你好!
有一种问题向你请教一下,
如果使用通配符的配置,
只有一个<result name='input'>/inputpage.jsp</result>
返回结果。
如果不同的action方法想返回不同的页面,是不是就不能能做了呢?

相关推荐

    struts2.0中文帮助手册

    Struts2.0在继承了Struts1.x的基础上进行了大量的改进,提供了一种更加灵活、强大的控制层解决方案。 Struts2.0的核心组件包括Action、Result、Interceptor等。Action是业务逻辑处理的中心,负责接收HTTP请求并调用...

    Struts2.0中文教程

    Struts2.0是Apache软件基金会的一个开源项目,它继承了Struts1.x的优点,并在其基础上进行了许多改进。Struts2.0提供了一种更加灵活的控制器层,支持多种视图技术,如JSP、FreeMarker等,并引入了强大的拦截器...

    Struts2.0框架技术详解

    通过在Action类中实现`validate()`方法来进行数据验证。 **示例代码**: ```java public class MyAction implements Validateable { private String username; public String getUsername() { return ...

    struts2.0中文教程

    Struts2.0是Java Web开发中非常重要的一个框架,它是Apache软件基金会的Jakarta项目下的一个产品。这个框架主要用于构建MVC(Model-View-Controller)架构的Web应用程序,提供了一种组织应用逻辑的方式,使得开发...

    struts 2.0 验证框架

    当用户提交表单后,Struts 2的验证框架会自动对数据进行验证。如果验证失败,系统会跳转到`input.jsp`页面显示错误信息;如果验证成功,将执行Action的`execute`方法,并跳转到`success.jsp`页面。 7. **自定义...

    Struts2.0做的注册+验证

    这个“Struts2.0做的注册+验证”项目是针对初学者的一个典型示例,旨在教授如何在Struts2.0框架下实现用户注册功能并进行数据验证。 1. **Struts2框架基础**: Struts2的核心是Action类,它是处理用户请求的中心。...

    struts2.0中英文帮助手册

    通过深入阅读和理解这两个文档,开发者可以有效地利用Struts2.0进行Web应用开发,解决诸如表单提交、数据验证、页面跳转、业务逻辑控制等问题。同时,文档还涵盖了框架的最新特性和改进,有助于保持应用的现代化和...

    struts 2.0 + hibernate +验证

    5. **用户输入验证**:在Action类或者实体类上定义验证规则,Struts 2的拦截器会在执行业务逻辑前进行验证。 6. **显示结果**:验证成功后,Struts 2会根据预设的结果类型(例如JSP页面、JSON或XML)返回响应。 ...

    struts 2.0帮助文档

    默认提供了一些预定义的拦截器,如`params`(处理请求参数),`validation`(表单验证)。 4. **OGNL(Object-Graph Navigation Language)**:Struts 2中的表达式语言,用于在Action和视图之间传递数据,实现数据...

    struts 2.0 源码 第三章

    在Struts 2.0中,核心组件包括Action、Result、Interceptor、ValueStack等。Action是业务逻辑的执行者,它处理用户请求并返回结果。Result负责展示Action执行后的结果,通常与视图层结合。Interceptor是拦截器,提供...

    struts2.0相关学习资料

    Struts2.0是Java Web开发中一个非常重要的框架,它是Apache...在实际项目中,熟练运用Struts2.0能提高开发效率,降低维护成本。同时,了解并熟悉相关的社区资源和最佳实践,对于提升个人技能和适应团队协作至关重要。

    Struts2.0两个小时教学PPT

    本教程重点介绍了Struts2.0中的类型转换、输入验证和拦截器,这些都是构建安全、健壮Web应用程序的关键组件。 **类型转换** 在传统的Web开发中,客户端发送的数据通常是字符串,而服务器端处理的是各种类型的数据...

    struts 2.0自定义验证器

    在Struts 2中,验证是控制层的重要组成部分,它确保了输入数据的质量,防止了无效数据进入数据库或引发错误。自定义验证器允许开发者根据特定业务需求创建自己的验证规则,从而提高代码的复用性和灵活性。 ### ...

    深入浅出Struts2.0

    例如,`params`拦截器负责从请求中提取参数并填充到Action实例中,`validation`拦截器进行字段验证。 4. **结果(Result)**:结果表示Action执行后的响应,可以是重定向、转发到一个JSP页面,或者返回JSON、XML等...

    struts2.0小例子

    在这个"struts2.0小例子"中,我们可以深入探讨Struts2.0的关键特性和用法。 1. **核心概念** - **Action**:Struts2中的Action类是业务逻辑的执行者,负责接收请求、处理数据并返回结果。 - **Result**:Action...

    struts2.0+spring+ibatis.doc

    在配置文件中,`action`节点的`name`属性对应URL前缀,`class`属性指定处理请求的Action类,而`method`则指明调用的具体方法,若不指定,默认调用`execute()`方法。`result`节点配置了方法执行后的跳转逻辑,预定义...

    struts2.0的 配置视频

    3. **拦截器栈**:自定义拦截器或者使用预定义的拦截器,如Params拦截器负责参数绑定,Validation拦截器进行表单验证。 4. **全局配置**:如全局结果、全局异常处理、全局常量等。 5. **Struts2的插件和扩展**:例如...

Global site tag (gtag.js) - Google Analytics