`
liujinmarshall
  • 浏览: 114103 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

DispatchAction与validate结合的问题

阅读更多
有了DispatchAction,就可以把对一个对象的crud放在一个action里写。但和validate结合起来以后,我总是有一个问题。比如说一个UserForm和一个UserAction。在UserForm Validate的时候,一般要检查的是用户资料的完整性,比如email是否正确,年龄等资料是否填写。但如果要在UserAction里添加remove方法的时候,这时就不需要那些资料的验证,只要一个id就可以了。

那么这个时候,要分开另写一个action,然后配置不需要Form,还是会有其他的更好办法,对crud进行识别,确定要不要进行validate?我在google上找DispatchAction+validate,第一个答案就是配置几个action,对应同一个类。
分享到:
评论
8 楼 java虫 2007-04-19  
引用
其实我说的“配置几个action”就是这个意思,配置的是几个<action>而不是Action类,都是指向一个action的


奥,我理解错误。ecsun说得方法是对的。

Validator提供ValidatorForm和ValidatorActionForm这两种类,
目的就是可以在更加精确的控制执行验证的条件。
7 楼 ahau205109 2007-04-19  
配置多个action映射,没有必要吧?
为什么不直接在form加个判断?
public ActionErrors validate(ActionMapping mapping, ServletRequest request) {
    if(request.getParameter("method").equlas("save")||request.getParameter("method").equlas("update"){
        .......
    }
    else{
        return null;
    }

}
6 楼 hantsy 2007-04-19  
不要使用自动验证
5 楼 liujinmarshall 2007-04-19  
ecsun 写道
其实是有很好的解决方案的,在appfuse作者的blog中,早就有这样的解决方案提出过。
对于这个的问题,我们可以通过配置来解决问题:
一般来说,一个DispatchAction的了类如UserAction里面会有几个动作,如通常的CRUD等,同时,我们的Form又是ValidatorActionForm的子类,这个时候,我们可以这么做:
<action path="/saveUserAction" type="UserAction" paramert="method"/>
很明显,这个action的配置,我们只用它做用户的数据保存工作。
当我们要做数据的删除工作的时候,我们增加另外一段配置:
<action path="/removeUserAction" type="UserAction" parameter="method"/>
接下来怎么做呢?
那就是在我们的validation.xml中指定对哪个action进行校验了,注意,我们在这里使用的是ValidatorActionForm,它是针对 action的,而不是针对form的
那我们的validation.xml就可以这么书写:
<form name="/removeUserAction">
  <filed ....../>
</form>
这样做的话,就可以解决楼主提到的关于DispathcAction的问题了。


其实我说的“配置几个action”就是这个意思,配置的是几个<action>而不是Action类,都是指向一个action的
4 楼 wangsunan 2007-04-19  
还是没解决楼主的问题啊
3 楼 fj_opensky 2007-04-19  
ecsun 写道
其实是有很好的解决方案的,在appfuse作者的blog中,早就有这样的解决方案提出过。
对于这个的问题,我们可以通过配置来解决问题:
一般来说,一个DispatchAction的了类如UserAction里面会有几个动作,如通常的CRUD等,同时,我们的Form又是ValidatorActionForm的子类,这个时候,我们可以这么做:
<action path="/saveUserAction" type="UserAction" paramert="method"/>
很明显,这个action的配置,我们只用它做用户的数据保存工作。
当我们要做数据的删除工作的时候,我们增加另外一段配置:
<action path="/removeUserAction" type="UserAction" parameter="method"/>
接下来怎么做呢?
那就是在我们的validation.xml中指定对哪个action进行校验了,注意,我们在这里使用的是ValidatorActionForm,它是针对 action的,而不是针对form的
那我们的validation.xml就可以这么书写:
<form name="/removeUserAction">
  <filed ....../>
</form>
这样做的话,就可以解决楼主提到的关于DispathcAction的问题了。


楼上的意思是:
  不同的ACTIONPATH(或者是ACTION的名字)其实对应的是同样的ACTION类,而这个ACTION类是一个DISPATCHACTION!
  校验是针对ACTION的名字执行对ACTIONFORM的验证的!

  FROM提交ACTION:
    saveUserAction.do?method=saveUser
    removeUserAction.do?method=removeUser
 
  dispatchaction有两个方法:
     saveUser(),removeUser()

  不知道理解是否正确?
  谢谢.
2 楼 kj23 2007-04-18  
lazyvalidator
1 楼 java虫 2007-04-18  
干吗在写一个action啊

XXXAction?method=remove&model.modelId=1

就行了,action里继续从form里取那个对象,根据他的Id删,和其他方法一样。
也可以从request里直接取。

相关推荐

Global site tag (gtag.js) - Google Analytics