询问一个关于SPRING SIMPLEFORM 的方法间运行流程问题(,也可以一起讨论)
public class FunctionLimitCtrl extends SimpleFormController{public FunctionLimitCtrl() {this.setCommandName("functionLimit");this.setCommandClass(FunctionLimit.class);this.setSessionForm(true);this.setValidateOnBinding(false);System.out.println("open..........."); //为啥构造里这个SYS打不出来?}//SOME SET注入 //关键问题在这里,ONSUBMIT方法死活就是不运行,当然里面的任何SYS也打不出消息protected ModelAndView onSubmit(Object command, BindException err,HttpServletRequest request,HttpServletResponse response) throws Exception {System.out.println("onsubmit"); ....DO SOME THINGreturn new ModelAndView(this.getSuccessView());} //奇怪的是这个processFormSubmission方法却和以往的ONSUBMIT方法一样正常运行(VOID的DOSUBMIT也可以运行)就是ONSUBMIT不行,如果删除了这个方法,并且只留下ONSUBMIT方法,ONSUBMIT还是不运行,但是却在SUBMIT后自动跳到SUCCESSVIEWprotected ModelAndView processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command, BindException err) throws Exception {System.out.println("processFormSubmission...");//DO SOME THING return new ModelAndView();} //在网上搜到一个说是类型绑定BUG会影响ONSUBMIT运行,但是照他的方法改了后还是没有效果/*protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {binder.registerCustomEditor(Integer.class,"id",new IntegerEditor());binder.registerCustomEditor(Integer.class,"authorityId",new IntegerEditor());}*/@SuppressWarnings("unchecked")protected Map referenceData(HttpServletRequest arg0, Object arg1, Errors arg2) throws Exception {Map pagemap=new HashMap();//PUT SOME THING IN MAPreturn pagemap;}protected Object formBackingObject(HttpServletRequest request) throws Exception {//SOME THING FOR NEW FL return fl;}}相关配置
<bean id="EditFunctionLimit" value="admin/authority/FunctionLimitForm"/><property name="successView" value="redirect:/admin/auth/funl.shtml"/><!-- admin/authority/FunctionLimitList"/> --><property name="functionLimitM" ref="functionLimitM"/><property name="authorityM" ref="authorityM"/></bean>
总之问题就是:为啥我的这个CTRL里面的ONSUBMIT方法始终不运行,但是其他的提交后运行的方法确正常运行?
另外我的 XX-SERVLET.XML 配置中这个CRTL的与其他不同的是没有加VALIDATE验证,难道这个验证会造成SIMPLEFORM按如下流程运行?还是有其他的什么地方有BUG? 1 楼 leafundermask 2007-09-19 或者谁给我讲解下VOID DOSUBMIT、ONSUBMIT、processFormSubmission,这三个方法在FORM提交后在运行时有啥异同之类的区别,当然DOSUBMIT没有返回值这种的就别调侃我啦 2 楼 leafundermask 2007-09-19 ?被换区了?
打分的高人能回答我一下么?
把主帖代码部分编辑了下,应该好看了点吧
搜索看来关于SIMPLEFORM流程的介绍,很多的偶是围绕SUBMIT前后差别的,但是对于SUBMIT后的方面却搜不到说明,有专门留意这方面的么? 3 楼 leafundermask 2007-09-19 http://www.iteye.com/topic/100514
按照这个帖子里总结的SIMPLEFORM流程应该是
get请求来到时,这样处理:
a) 请求传递给一个controller对象
b) 调用formBackingObject()方法,创建一个command对象的实例。 c) 调用initBinder(),注册需要的类型转换器
d) 调用showForm()方法,返回准备呈现给用户的视图
e) 调用referenceData()方法,准备给用户显示相关的数据。如用户登录需要选择的年度信息
f) 返回formView指定的视图
post请求来到时,这样处理:
a) 调用formBackingObject()方法,创建一个command对象的实例。
b) 将请求传来的参数写入command对象
c) 如果设置为要求验证,则调用validator类进行数据验证
d) 调用onBindAndValidate()方法,该方法允许自定义数据绑定和校验处理
e) 调用onSubmit()方法,进行业务逻辑处理
结果到我这个代码的问题是
GET的情况下一致,没问题
POST时候ABD都一致,也没问题(我没有在配置文件中家VALIDATE,并且设置VALIDATE为FALSE)
然后到E这步,onSubmit完全不执行(但是最终会自动跳到SuccessView,除了SYS打不出信息外,其他业务代码包括用RESPONSE做REDIR跳转,都是完全不执行),但是同样的代码换到processFormSubmission或者doSubmit方法里却能正常执行,尤其是同样MODELANDVIEW返回值的processFormSubmission方法,几乎就能替代ONSUBMIT。这是为什么?这种貌似重复的方法有什么区别,或者我这样替换会出现什么BUG么? 4 楼 leafundermask 2007-09-20 哈哈哈 搞定啦
原来是ONSUBMIT里面参数顺序错了导致不执行
可是我的方法名都是用ECLIPSE生成的
估计ECLIPSE出啥问题了
回去再折腾下 5 楼 leafundermask 2007-09-20 晕,飞楼了
编辑掉 6 楼 nanjiwubing123 2012-05-14 问题解决了吗