Spring MVC 真不咋地~~~
从Struts1换到Spring MVC,真的有很多不舒服的地方,也许是习惯问题,也许是我还对Spring MVC了解不够。
我并不需要什么什么特性,什么什么功能,只需要Controller最基本的功能:request、response、还有form数据绑定,其他的我自己来实现,必要时写一子类扩展,在Struts1中,这些都有,而且没有多余的,并提供DispatchAction可供扩展。
Spring MVC提供的Controller所有的加一块,当然是包含Struts1的,但是分的太细,在项目中更多关注的是实现,感觉没什么必要。
弄了几天Spring的MVC,我基本的需求就是简单,比如XML配置:
<bean name="/logout.do" class="com.demo.control.system.LogoutController" />
它提供的其他配置方式,感觉很麻烦,自动影射类名、地址什么配置方式,又感觉怪怪的,而且还不区分大小写。这样配置,以后再新加控制器时,也就这么一句话,谁都看得懂。
返回的地址就在Controller里写return new ModelAndView("/test.jsp"); 这个写在配置文件里还是写在代码里感觉都一样,写在配置文件里还麻烦。
然后说说我遇到的问题:
1、直接使用AbstractController:XML配置格式没变,但没有form数据绑定功能,无奈放弃。之后发现第2点,想解决这个问题。
2、使用SimpleFormController:XML配置格式没变,有form数据绑定功能,但是不GET请求和POST请求被分开了。GET进来的时候需要formView属性,所以这个属性还必须要设置,不设置就报错!
而往往formView和successView是一样的,GET进控制器也是必要的,为了统一处理,我重写了isFormSubmission(),让它直接返回true,这样GET/POET就都进得来,formView也省了,successView就是return new ModelAndView("/test.jsp");
可问题又来了,commandClass这个也必须要设置,不设置就报错,可有些JSP的确是不需要数据绑定的,这就又要换回AbstractController,麻烦,这两个Controller实现的方法都不一样!
之后发现第3点,想解决这个问题。
3、使用MultiActionController:如果XML配置格式不变,那控制器的singleton就纯属扯谈了,换另一种配置,真是巨麻烦,代码就不贴了。
再说form数据绑定,有,在方法定义的第三个参数,但方法体必须写上:request.setAttribute("command", xxxBean);,不写,或者request.setAttribute("command", null);都报错。
我真就不明白,为什么null不行,有就绑定,没有就不绑定呗,Struts的form不就是这样的吗!
后来有点倾向于JODD,但这个需要在JSP页面中写上需要绑定的JavaBean全包路径,不便于维护,而且我想既然有MVC框架,干嘛还要引入其它的项目,所以也没用这个。
想不明白这么简单的事干嘛就搞的这么复杂,哎~也许是我对Srping MVC不够了解,毕竟才3天的时间,对于我的“遭遇”有经验的朋友能否给个建议,讨论讨论,给个最佳实践方案~~谢了各位!