springMVC 数据绑定 多个对象 如何准确绑定?

以前用struts2时,url请求参数自动封装成对象用的很是爽,但是在spring中,就有问题了:

比如,有两个对象

[code="java"]class Student{

private String name;

private String type; //比如有自费、公费

}
[/code]

[code="java"]class teacher{

private String name;

private String level;

}[/code]
当中的get/set方法省略。

struts2的中jsp的写法是:

[code="java"]

<input name="student.name" value="Kate" />

<input name="student.type" value="自费" />

<input name="teacher.name" value="Gavin" />

<input name="teacher.level" value="2" />

[/code]
这样子在action中就能封装好student和teacher对象。

但是在spring中,要这么写

[code="java"]@RequestMapping("/school.do")

public String school(Student student, Teacher teacher) {

 return "school";

}[/code]
如果还是想刚才的jsp那些写表单,是不能封装参数的,必须把“student.”和“teacher.”去掉,但是这样封装就不能准确封装了。

7个回答

刚刚写了一个扩展来解决这个问题
[url]http://jinnianshilongnian.iteye.com/blog/1717180[/url]

支持spring 3.1.x 暂不支持spring3.0

这是spring的问题,确实不能带前缀,如果需要我可以写一个扩展 :D

jinnianshilongnian
jinnianshilongnian 嗯,理解偏差,说的不明确
7 年多之前 回复
hellostory
hellostory 不是Spring不能带前缀,而是这里的前缀没法解决上述问题!
7 年多之前 回复

如果一个表单需要提交多个对象!这个时候你的设计可能不是那么优雅!
如果想精确匹配,你写一个总的 DTO 转换下

a464378820
Igccd thx,大侠~
7 年多之前 回复

自己写个DataBinderModel{
Student student;
Teacher teacher;
//get --set---省略
}。
把参数绑定到这个model就可以了。这方面确实没有struts直接,需要中间转一下。

写Dto转化一下吧!struts2方便了开发,牺牲了运行的效率

楼主看下这个帖子,里面讨论了这个问题,http://www.iteye.com/topic/1124433,第三页

a464378820
Igccd 感谢你的回复~
7 年多之前 回复

方便了开发,就会牺牲性能。就看如何取舍了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问