浏览 5543 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-02-22
http://www.iteye.com/pages/viewpage.action?pageId=870
《可以处理多个请求的Action》中介绍了两种方法,用于同一个action处理不同请求。 robbin提到: 引用 对于Action的验证文件来说,也是每个method对应一个: actionName-methodName-validation.xml,对于execute方法,则是 actionName-validation.xml
但我在使用中发现个小问题, 我为我的 save() 方法配置了验证文件TestAction-save-validation.xml,却没法正常工作。但当我配置TestAction-validation.xml 时却发现在无论用 /test.action 还是 /test!save.action 才能正常校验了。 我想问一下,有人成功运用过每个method对应一个: actionName-methodName-validation.xml这个功能吗? 也就是 test!save.action -->校验于 -->TestAction-save-validation.xml test.action -->校验于 -->TestAction-save-validation.xml 当然如果某个action中某些方法不想被ww拦截,可以加 <interceptor-ref name="component"> <param name="excludeMethods">input,cancel</param> </interceptor-ref> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-02-22
应该是
ActionClassName-actionName-validation.xml,ActionClassName-validation.xml,然后 ActionSuperClassName-actionName-validation.xml, ActionSuperClassName-validation.xml,ActionImplementedInterfaceName-actionName-validation.xml,ActionImplementedInterfaceName-validation.xml,...这样一直下去。 对同一个Action class定义多个actionName好像是没太大意思,我也正需要对不同的method定义不同的validation rule,似乎可以参照com.opensymphony.xwork.validator.ValidationInterceptor定义一个新的ValidationInterceptor,把 ActionValidatorManagerFactory.getInstance();.validate(action, context);;改为 ActionValidatorManagerFactory.getInstance();.validate(action, method);;明天试试看 |
|
返回顶楼 | |
发表时间:2006-02-23
Class(or super class or interface)Name[-context]-validation.xml
context = actionName[!methodName] |
|
返回顶楼 | |
发表时间:2006-02-23
context does not contain !methodName
code from com.opensymphony.xwork.validator.ValidationInterceptor, you can also enable its logger... protected void before(ActionInvocation invocation); throws Exception { String method = invocation.getProxy();.getMethod();; if (excludeMethods.contains(method); && !includeMethods.contains(method);); { log.debug("Skipping validation. Method ["+method+"] found in exclude list.");; return; } if ( includeMethods.size(); == 0 || includeMethods.contains(method); ); { Object action = invocation.getAction();; String context = invocation.getProxy();.getActionName();; if (log.isDebugEnabled();); { log.debug("Validating " + invocation.getProxy();.getNamespace(); + "/" + invocation.getProxy();.getActionName(); + ".");; } ActionValidatorManagerFactory.getInstance();.validate(action, context);; } } |
|
返回顶楼 | |
发表时间:2006-02-23
根据楼上介绍再次做了试验.
1. TestAction : public class TestAction extends ActionSupport { private String name; public String getName(); { return name; } public void setName(String name); { this.name = name; } public String save(); throws Exception { if(hasFieldErrors(););{ return INPUT; } return SUCCESS; } } 校验文件有: 1. TestAction-validation.xml 2. TestAction-save-validation.xml 3. TestAction-test!save-validation.xml xwork.xml配置 <action name="test" class="cn.TestAction"> <result name="input">form.jsp</result> <result name="success">test.jsp</result> </action> <action name="save" class="cn.TestAction" method="save"> <result name="input">formMethod.jsp</result> <result name="success">test.jsp</result> </action> form.jsp文件 <ww:form action="test!save.action" name="test"> <ww:textfield name="name"></ww:textfield> <ww:submit></ww:submit> </ww:form> formMethod.jsp <ww:form action="save.action" name="test"> <ww:textfield name="name"></ww:textfield> <ww:submit></ww:submit> </ww:form> 测试: 1 . form.jsp 测试目的: test!save.action 相应的校验文件是哪个? 结果: 只有 1. TestAction-validation.xml 有作用. 结论: 1. 每个method对应一个: actionName-methodName-validation.xml 不成立! 2. Class(or super class or interface)Name[-context]-validation.xml context = actionName[!methodName] 也不行! 2. formMethod.jsp 测试目的:save.action 相应的校验文件是哪个? 结果: 有 1. TestAction-validation.xml 2. TestAction-save-validation.xml 同时发生作用. 结论: 当在xwork.xml中为每个method配置一个action时,校验文件的规则应该是, Class(or super class or interface)Name[-actionName]-validation.xml ,而不要用 className-validation.xml,如果同时存在会发生两次校验. ![]() 至此我的疑问还没得到解决, 每个method对应一个: actionName-methodName-validation.xml ??? |
|
返回顶楼 | |
发表时间:2006-02-23
It is clear that webwork performs validation according to action name(action alias in your xwork.xml) instead of method name by default, but you can change this by yourself.
|
|
返回顶楼 | |
发表时间:2006-02-23
如果只能通过 action name 映射,那《可以处理多个请求的Action》一文本中提到actionName-methodName-validation.xml也只能算是笔误了??
|
|
返回顶楼 | |
发表时间:2006-02-23
已经写了一个TestCase,在2.1.7版
Class(or super class or interface)Name[-context]-validation.xml context = actionName[!methodName] 这个规则是对的。 补充说明下,如果同时有 Class(or super class or interface)Name-validation.xml Class(or super class or interface)Name-context-validation.xml 两个文件,那么验证器是这两者的总和。 测试代码见附件,两份相同的,多发了一份:) |
|
返回顶楼 | |
发表时间:2006-02-23
我用的是2.2,这个月才下载的,对于
Class(or super class or interface)Name-actionName!methodName -validation.xml 这个规则真的不行,试了好多次了. |
|
返回顶楼 | |
发表时间:2006-02-23
我查了一下xwork源代码和wiki文档,webwork2.2(xwork1.1)确实改了,不支持针对method单独声明验证文件了,而是针对actionName单独声明验证文件了。
这样的话,针对处理多个请求的Action来说,我们就应该倾向于对于一个ActionClass在xwork中定义为多个action的方式来实现。这样就会避免两个问题: 1、验证文件无法针对method单独定义规则 2、RestfulActionMapper不支持actionName!method方式的URL请求。 |
|
返回顶楼 | |