action是struts2中编程的中心单元,持有数据并且执行逻辑。同时还提供validation,错误信息处理等便利。本文描述action和validation如何配合、如何协同。这些协同很多都是以name匹配的方式来完成的,所以我们首先来看看action和validation各自的命名方式,然后再把二者联系起来。
1. wildcard mapping
在struts2中,对action-mapping引入了wildcard机制。wildcard-mapping包括class层的、method层的、参数层的,个人感觉method层实用中会更多见一些。下面是一个wildcard method的例子。来自官网。
在struts.xml文件中
- <action name="*Crud" class="example.Crud" method="{1}">
-
- <action name="Crud_*" class="example.Crud" method="{1}">
有访问来到并且满足name="*Crud"的映射时,框架会自动为该mapping创建一个新的action name,引用该class中的 * method。返回的result中也能使用wildcard,例如
xml 代码
- <action name="*Text"
- class="TextMngAction"
- method="{1}">
- <result name="success">{1}Text.jspresult>
- <result name="input">editText.jspresult>
- </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中编写的内容大致为
- <validators>
- <field name="text.id">
- <field-validator type="requiredstring">
- <message key="text.id">message>
- field-validator>
- <field-validator type="regex">
- <param name="expression">
-
- param>
- <message key="text.id.length">must be 4 digitmessage>
- </field-validator>
- </field>
- </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. 二者的配合
这里要指出官网文档中的一个错误,
- To use a postfix wildcard, just move the asterisk and add an underscore.
-
- <action name="Crud_*" class="example.Crud" method="{1}">
- From the framework's perspective, a wildcard mapping creates a new "virtual" mapping with all the same
- attributes as a conventional, static mapping. As a result, you can use the expanded wildcard name as the name
- of validation, type conversion, and message resource files, just as if it were an Action name (which it is!).
-
- Crud_input-validation.xml
- 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 代码
- <action name="*Text" class="TextMngAction" method="{1}">
分享到:
相关推荐
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, ...
Laravel开发-laravel-resource-route-wildcard-alias 在具有别名的路由模型绑定中使用相同模型名称的laravel资源路由通配符别名
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-...
struts官方例子包,包括struts-tag、control-tag、form-tag、wildcard-method-selected等例子。
$ npm install wildcard-named 用法 import wildcard from "wildcard-named" ; 基本例子 import wildcard from "wildcard-named" ; wildcard ( "//blog.com/page/14" , "//blog.com/page/[digit:page]" ) ; // { '...
struts2演示 <br>1./helloworld - helloworld 2./spring - 与spring整合 3./coc - 惯例优先配置,零配置文件 - codebehind不支持redirect,chain等操作,需要自己写jsp跳转 4./crud - CRUD,Create Read...
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...
01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...
••••用法•基本••••更多• ...const { server } = require ( '@wildcard-api/server' ) ; // We define a `hello` function on the server server . hello = function ( name ) { return { message : 'Welcom
我刚刚在自学ssh,这份源码主要就是实现了struts2中通配符的使用。
apache tiles3.0 开源框架 页面组装
资源分类:Python库 所属语言:Python 资源全名:wildcard.media-1.0a2.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
第 1 部分和第 2 部分的两个程序在 2 个给定的文件夹中命名,12629part1.py 和 12629part2.py 还提供了这两个部分的必需文件。 两者都在python 3中并运行它们, 第 1 部分:索引构建 1. You must have a dataset...
access-list 100 extended permit/deny protocol source-ip-address wildcard-mask destination-ip-address wildcard-mask [port-number] ``` 3. **应用ACL**:根据需要将所创建的扩展ACL应用于适当的接口和方向...
资源分类:Python库 所属语言:Python 资源全名:wildcard.fixpersistentutilities-1.0a3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
让我们用Hetzner区域文件DNS挑战加密通配符...脚本需要知道您的登录数据和certbot-auto的安装路径才能正常运行。 必须在certbot.py文件中设置certbot-auto的安装路径。 只需编辑CERTBOT_AUTO全局变量。 可以在hetzner.
前端开源库-match-url-wildcard匹配URL通配符,模块使用通配符按模式匹配URL
babel-plugin-wildcard 允许您在编译时从目录import所有文件。 安装 $ npm install babel-plugin-wildcard 用法 通过.babelrc (推荐) .babelrc { " plugins " : [ " wildcard " ] } 通过CLI $ babel --...
通配符字符串匹配字符串匹配,其中一个字符串包含通配符( )
网络通配符域如何使用生成用于netcup的API密钥和密码将NC_Apikey,NC_Apipw和您的Netcup客户ID(NC_CID)插入docker-compose文件编辑命令中列出的通配符域(例如* .example.com) 运行docker-compose up并享受自动...