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

struts2中Wildcard-method action和validation的协同

阅读更多

action是struts2中编程的中心单元,持有数据并且执行逻辑。同时还提供validation,错误信息处理等便利。本文描述action和validation如何配合、如何协同。这些协同很多都是以name匹配的方式来完成的,所以我们首先来看看action和validation各自的命名方式,然后再把二者联系起来。

1. wildcard mapping

在struts2中,对action-mapping引入了wildcard机制。wildcard-mapping包括class层的、method层的、参数层的,个人感觉method层实用中会更多见一些。下面是一个wildcard method的例子。来自官网。

在struts.xml文件中

  1. <action name="*Crud" class="example.Crud" method="{1}">  
  2.   
  3. <action name="Crud_*" class="example.Crud" method="{1}">  

有访问来到并且满足name="*Crud"的映射时,框架会自动为该mapping创建一个新的action name,引用该class中的 * method。返回的result中也能使用wildcard,例如

xml 代码
  1. <action name="*Text"  
  2.     class="TextMngAction"  
  3.     method="{1}">  
  4.     <result name="success">{1}Text.jspresult>  
  5.     <result name="input">editText.jspresult>  
  6. </action>  

下面来看看vaildation

2. validation

struts2中的validation主要有4个基本途径:

1 validate()
2 validateXxx()
3 validation 配置class-validation.xml
4 validation 配置class-alias-validation.xml

前两种方式通过在action中声明并实现一个method来完成,后面两个则是运用validation框架。1和2方式下,同<action></action>的配置基本不存在配合的问题,validate()是调用这个action的任何逻辑动作前都会执行,validatXxx()是在调用这个action的Xxx()方法前被执行,他们的配合基本同配置无关,在一个java文件中完成配合。 后两种方式则牵涉到多个文件的配置。

第一,后两种方式需要为每个action class建立一个xml文件,并且这些xml文件将放在action的java旁边,也就是同一个package目录下。

第二,validation.xml中编写的内容大致为

  1. <validators>  
  2.     <field name="text.id">  
  3.         <field-validator type="requiredstring">  
  4.             <message key="text.id">message>  
  5.         field-validator>  
  6.         <field-validator type="regex">  
  7.             <param name="expression">  
  8.                   
  9.             param>  
  10.             <message key="text.id.length">must be 4 digitmessage>  
  11.         </field-validator>  
  12.     </field>  
  13. </validators>  

 其含义为对text属性的id字段进行检测,例子中要求该字段不能为空,且内容必须是4位数字。关于field-validator 的类型,大家可以参考官网。检查不通过时,出错信息在<message></message>中表示。 key是要求要到资源文件中所搜取的,如果搜不到,则用<message></message>中的内容直接显示。关于资源文件的设置和用法,本文不涉及。

第三,validation.xml文件的命名有两种方式,即class-validation.xml和class-alias-validation.xml。其中的class就是该Action的类名(不含.class),alias就是action-name。需要注意的是,class-validation.xml在调用该class的任何方法时都会起作用,class-alias-validation.xml则仅在和alias中的action-name相同时才起作用。如果你希望某个action到来时,仅有class-alias-validation.xml发生作用,那是做不到的。所以在class-validation.xml只能放全体method都用的着的验证条件,或者索性不建立class-validation.xml这个文件,而只使用class-alias-validation.xml。

 3. 二者的配合

这里要指出官网文档中的一个错误,

  1. To use a postfix wildcard, just move the asterisk and add an underscore.   
  2.   
  3. <action name="Crud_*" class="example.Crud" method="{1}">  
  4. From the framework's perspective, a wildcard mapping creates a new "virtual" mapping with all the same
  5.  attributes as a conventional, static mapping. As a result, you can use the expanded wildcard name as the name 
  6. of validation, type conversion, and message resource files, just as if it were an Action name (which it is!).    
  7.   
  8. Crud_input-validation.xml    
  9. Crud_delete-conversion.xml    

按官网的说法,validation.xml可以命名成actionName-validation.xml(如果我们把上面的Crud_理解成name="Crud_"中的Crud)或者class_method-validation(如果我们把Crud理解成class="example.Crud"中的Crud)。但经实际验证,这种命名方式是不起作用的。成功的命名方式是Crud-Crud_input-validation.xml这种形式。即按照class-alias-validation.xml这种格式,class是action的类名,alias是整个wild mapping后的结果。

大家看到了,Crud-Crud_input-validation.xml显得比较啰嗦,即使同时出现两个Crud,我也不希望连续出现。所以在我看来,通常在配置<action>时应该使用*前置的方式。

xml 代码
  1. <action name="*Text"     class="TextMngAction"    method="{1}">     
分享到:
评论

相关推荐

    struts-2.3.30-all所有jar包

    tiles-request-servlet-wildcard-1.0.1.jar, tiles-request-velocity-1.0.1.jar, tiles-servlet-2.2.2.jar, tiles-template-2.2.2.jar, tiles-velocity-3.0.1.jar, velocity-1.6.4.jar, velocity-tools-1.3.jar, ...

    js-leetcode题解之44-wildcard-matching.js

    js js_leetcode题解之44-wildcard-matching.js

    Struts2教学视频

    2. 域模型(Domain Model)是Struts2中用于封装业务数据的对象,Action可以直接引用域模型对象,将请求参数绑定到模型中。 以上就是关于Struts2的一些基础知识点,学习Struts2不仅可以帮助理解MVC模式在实际应用中的...

    struts2 action的三种访问方式

    在Struts2中,Action是处理用户请求的核心组件。它负责业务逻辑的执行,并将结果返回给视图进行展示。本篇文章将详细介绍Struts2 Action的三种访问方式:传统方式、通配符方式和动态方式。 1. **传统方式(Static ...

    struts-ex-coding.rar_ex

    3. **struts2_03_action_method1.rar** - 这个例子可能展示了Action类中的方法映射,允许根据不同的请求参数调用不同的业务逻辑方法。 4. **struts2_04_action_dmi.rar** - "DMI"可能指的是动态方法调用,Struts2的...

    Struts2_wang_Wildcard.rar_wildcard

    在Struts2中,通配符(Wildcard)是一个强大的功能,它允许你使用模糊匹配来映射URL到Action类,从而简化配置并提高代码的可维护性。这个名为"Struts2_wang_Wildcard.rar_wildcard"的压缩包很可能是包含了一个示例...

    271个java需要用的jar包

    tiles-request-servlet-wildcard-1.0.1.jar tiles-request-velocity-1.0.1.jar tiles-servlet-3.0.1.jar tiles-template-3.0.1.jar tiles-velocity-3.0.1.jar tomcat-juli.jar velocity-1.6.4.jar velocity-tools-...

    Laravel开发-laravel-resource-route-wildcard-alias

    本主题将深入探讨如何在具有别名的路由模型绑定中使用相同的模型名称的laravel资源路由通配符别名。 ### 资源路由的基本概念 资源路由允许我们通过单个路由定义声明来创建一组路由,这些路由通常对应于"创建"、...

    Struts2学习笔记

    - **配置与执行**:通过`struts.xml`中的`&lt;action&gt;`标签来配置Action,Struts2会根据URL路径来执行相应的Action。 - **灵活性**:支持动态调用、通配符配置等多种灵活的调用方式。 #### 02 Struts2-Result - **...

    wildcard-named:一个小巧易用的实用程序模块,用于使用JavaScript的已命名和未命名通配符来匹配字符串

    $ npm install wildcard-named 用法 import wildcard from "wildcard-named" ; 基本例子 import wildcard from "wildcard-named" ; wildcard ( "//blog.com/page/14" , "//blog.com/page/[digit:page]" ) ; // { '...

    struts2Demo

    struts2演示 &lt;br&gt;1./helloworld - helloworld 2./spring - 与spring整合 3./coc - 惯例优先配置,零配置文件 - codebehind不支持redirect,chain等操作,需要自己写jsp跳转 4./crud - CRUD,Create Read...

    Struts2 学习笔记.doc

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,为开发者提供了构建可维护性和可扩展性高的Web应用程序的工具。以下是对Struts2核心概念和特性的详细说明: 一、Struts2的作用:...

    Struts 源码学习之ActionServlet

    `ActionServlet`是Struts框架中的关键组件,负责处理来自客户端的所有请求,并将其分发到相应的Action处理类。它是基于Servlet容器(如Tomcat)的,因此必须部署在一个支持Servlet的环境中。 #### 三、Action...

    struts2权威指南光盘源码-第四章

    "namespace"可能涉及Struts2的命名空间配置,"wildcard"和"wildcard2"可能探讨了URL映射的通配符规则,"method"可能涉及方法选择和调度,"globalResult"和"parameterResult"可能关于全局结果和参数驱动的结果。...

    struts2通配符示例代码

    在Struts2的配置中,通配符(Wildcard)的使用是一个非常实用的功能,它使得URL映射更加灵活,减少了重复配置。下面将详细解释Struts2通配符的用法,并结合示例代码进行解析。 1. **Struts2通配符概述** Struts2的...

    struts2_actionwildcard代码

    在Struts2中,Action Wildcard是一个重要的概念,它允许我们使用灵活的URL映射来调用不同的Action,从而实现更加动态和可扩展的web应用设计。 Action Wildcard的核心是基于通配符的Action配置,它可以让我们定义URL...

    Struts2 开发笔记

    本教程将深入讲解Struts2的核心概念和技术,包括Action、Namespace、标签以及Action的配置和动态调用。 一、Struts2的作用: Struts2的主要目标是提供一种统一的框架,用于分离应用的业务逻辑、视图呈现和控制器层...

    基于Java语言的Struts2_06版本WildCard Mapping设计源码解析

    该优化项目深入解析了基于Java语言的Struts2_06版本的WildCard Mapping设计,源码包含30个文件,包括13个JAR包、3个XML配置文件、2个JSP文件、2个Java源文件、1个classpath文件、1个gitignore文件、1个项目配置文件...

    Struts2_0600_ActionWildcard

    Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建...通过阅读"Struts2_0600_ActionWildcard"这篇博客,开发者可以学习到更多关于如何在Struts2中有效使用Action Wildcard的技巧和最佳实践。

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...

Global site tag (gtag.js) - Google Analytics