论坛首页 Java企业应用论坛

[SpringMVC]修改源码使之能够更加智能的自动装配request请求参数.

浏览 48728 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-06-14  
Spring MVC做些类似WebApi的东西还是不错, 其实硬要那样做可以在前端做下动作。把那些表单的都转化成json之后再在controller里面获取对象。
0 请登录后投票
   发表时间:2012-06-15   最后修改:2012-06-15
SpringMVC的开闭原则,并非希望你通过直接修改源码的方式来修改,而是通过配置接口的实现类来实现customize,所以直接改源码的做法不是很妥当。比如说,你的改动在SpringMVC3.1的版本中,就很难被支持。难道你每次升级都重新去修改源码?

SpringMVC在进行参数映射时无法对应于多个POJO是一个老问题了,楼主的方法是一个比较好的尝试,不过也仅仅解决了部分问题,对于List、Map之类的映射,即使通过楼主的方法似乎也无法得到解决。楼主方法的致命问题在于不依赖Annotation的情况下,必须借助编译器把参数名称一起加入到编译的选项中去。

要彻底让SpringMVC的参数映射与Struts2类似的映射方式,最好的改造方式是引入SpringEL。不过这个改动稍微有点大,所以这也是SpringMVC迟迟没有加入这一特性的原因。
0 请登录后投票
   发表时间:2012-06-15  
幸亏我当时没有盲目跟风!!!
0 请登录后投票
   发表时间:2012-06-15   最后修改:2012-06-15
downpour 写道
楼主方法的致命问题在于不依赖Annotation的情况下,必须借助编译器把参数名称一起加入到编译的选项中去。


开发环境一般都是编译的时候带上带上参数名称的。还有其他的实现机制吗?谁能分享一下 。
0 请登录后投票
   发表时间:2012-06-15   最后修改:2012-06-15
downpour 写道
楼主方法的致命问题在于不依赖Annotation的情况下,必须借助编译器把参数名称一起加入到编译的选项中去。

要彻底让SpringMVC的参数映射与Struts2类似的映射方式,最好的改造方式是引入SpringEL。不过这个改动稍微有点大,所以这也是SpringMVC迟迟没有加入这一特性的原因。



对,我认为Spring就是因为这个原因而没有采取对应多个pojo的策略
我这样修改源码主要是因为我只是希望在自己的项目中使用SpringMVC更加方便,当然没有考虑通用性喽
0 请登录后投票
   发表时间:2012-06-15  
spring 这点弱爆了,难道他们认为一个表单就该对应一个po!!!!!
0 请登录后投票
   发表时间:2012-06-15  
kjj 写道
spring 这点弱爆了,难道他们认为一个表单就该对应一个po!!!!!


你应该反过来想,你在一个应用中,到底有多少情况会碰到一个表单对应于多个object?
0 请登录后投票
   发表时间:2012-07-05  
首先,一个表单对应多个对象的情况不是很多,
另外,偶尔碰到这种情况,定义一个简单form类不就行了,何必去动源码那么麻烦。
class Form{
   A a;
   B b;
}
表单提交参数名用a.name,b.name;

另外,我认为在web层适当的定义一些Form类是有必要的,毕竟实际情况中,很多实体类并不能很好的映射到表单上,而且实体类的修改会涉及到页面表单字段的修改是个问题。

Struts2没有这个问题是因为Action本身就是Form Bean,这个看似简化代码的设计会造成Action属性混乱不可读,Action方法无法快速准确知道对应form的字段,维护麻烦等等问题。
0 请登录后投票
   发表时间:2012-07-05  
xiaojing3517 写道
hellostory 写道
s929498110 写道
从今天凌晨到现在,过去21个小时了。

我数了数java板块最新的总回复,才22个帖子有新回复

呵呵。ITEYE真是越来越冷清了!!!


ITEYE首页改版失败的后遗症!!!

我感觉首页改版的像陀屎

我在想首页的改变是不是就是为了使javaeye和csdn更好的合并,而不是为了方便大家讨论呢?
0 请登录后投票
   发表时间:2012-11-05  
我感觉这个本质的问题还是springMVC和struts2设计理念不同造成的,大家大部分人都是先接触struts2
而struts2的controller又是从webwork继承来的,而struts1.0也不是这么设计的。
首先:

从webwork开始到struts2为止,设计理念是用controller的成员变量来接收前台页面的参数及值,这样带来的好处显而易见,开发阶段很容易,但是带来的后果是成员变量会带来并发的问题,我不得不把controller设计成非单例的,用性能来换取开发的便利。

但是springMVC实际上使用的是struts1的模式,利用局部变量实现这件事,利用实现WebArgumentResolver接口, 或者用formbean中转的形式来实现这种结果,但是controller就可以在大部分时候声明为单例了。来加快程序运行的效率。

自己的一些看法,若有不对请指正。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics