您的位置:首页 > 编程语言 > Java开发

springMVC中多个对象的数据绑定

2014-05-07 00:00 369 查看
摘要:转载自micmiu–软件开发+生活点滴[http://www.micmiu.com/]


目录:

概述

实现方法及测试

[一]、概述
form表单中对应了多个对象而且不同对象间的属性名有相同的情况下,如何才能把页面数据准确绑定到各个对象中去呢?比如:form表单中对应了Course(课程介绍,属性包含:name、description)和Teacher(该课程的教师信息,属性包含:name、email、grade),两个对象中有同名的属性:name
[二]、实现方法及测试
如果多个对象之间没有同名的属性,springMVC可以实现对象的转化,如果是struts2可以运用前缀的方式来解决,类似course.name,teacher.name,那么在这里我们可以从struts2中得到一定的启发,创建一个父级的对象CourseInfo.java它包含了Course、Teacher这两个对象:
1packagecom.micmiu.demo.web.v2.demo.vo;
2
3importorg.apache.commons.lang3.builder.ToStringBuilder;
4
5importcom.micmiu.demo.web.v2.demo.entity.Course;
6importcom.micmiu.demo.web.v2.demo.entity.Teacher;
7
8/**
9*课程信息(view层)
10*
11*@author<ahref="http://www.micmiu.com">MichaelSun</a>
12*/
13publicclassCourseInfo{
14
15//课程介绍
16privateCoursecourse;
17
18//老师信息
19privateTeacherteacher;
20
21publicCoursegetCourse(){
22returncourse;
23}
24
25publicTeachergetTeacher(){
26returnteacher;
27}
28
29publicvoidsetCourse(Coursecourse){
30this.course=course;
31}
32
33publicvoidsetTeacher(Teacherteacher){
34this.teacher=teacher;
35}
36
37@Override
38publicStringtoString(){
39returnToStringBuilder.reflectionToString(this);
40}
41}
Course.java

1packagecom.micmiu.demo.web.v2.demo.entity;
2
3importjavax.persistence.Column;
4importjavax.persistence.Entity;
5importjavax.persistence.Table;
6
7importorg.apache.commons.lang3.builder.ToStringBuilder;
8
9importcom.micmiu.demo.web.v2.base.entity.IdEntity;
10
11/**
12*课程介绍
13*
14*@author<ahref="http://www.micmiu.com">MichaelSun</a>
15*/
16@Entity
17@Table(name="T_DEMO_COURSE")
18publicclassCourseextendsIdEntity{
19
20@Column(name="NAME")
21privateStringname;
22
23@Column(name="DESCRIPTION")
24privateStringdescription;
25
26publicStringgetName(){
27returnname;
28}
29
30publicStringgetDescription(){
31returndescription;
32}
33
34publicvoidsetName(Stringname){
35this.name=name;
36}
37
38publicvoidsetDescription(Stringdescription){
39this.description=description;
40}
41
42@Override
43publicStringtoString(){
44returnToStringBuilder.reflectionToString(this);
45}
46}
Teacher.java
packagecom.micmiu.demo.web.v2.demo.entity;

importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.Table;

importorg.apache.commons.lang3.builder.ToStringBuilder;

importcom.micmiu.demo.web.v2.base.entity.IdEntity;

/**
*教师信息
*
*@author<ahref="http://www.micmiu.com">MichaelSun</a>
*/
@Entity
@Table(name="T_DEMO_TEACHER")
publicclassTeacherextendsIdEntity{

@Column(name="NAME")
privateStringname;

@Column(name="EMAIL")
privateStringemail;

@Column(name="GRADE")
privateStringgrade;

publicStringgetName(){
returnname;
}

publicStringgetEmail(){
returnemail;
}

publicStringgetGrade(){
returngrade;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicvoidsetEmail(Stringemail){
this.email=email;
}

publicvoidsetGrade(Stringgrade){
this.grade=grade;
}

@Override
publicStringtoString(){
returnToStringBuilder.reflectionToString(this);
}
}

view页面中form表单内容如下:
1<form:formid="input-form"modelAttribute="courseInfo"
2action="${ctx}/demo/course.do?method=save"method="post">
3<inputtype="hidden"name="id"value="${course.id}"/>
4<fieldsetclass="prepend-top">
5<legend>课程信息</legend>
6<divid="messageBox"class="error-msg"style="display:none">输入有误,请先更正。</div>
7<div>
8<labelfor="course.name"class="field">课程名称:</label><input
9type="text"id="course.name"name="course.name"size="20"
10value="${courseInfo.course.name}"class="required"/>
11</div>
12<div>
13<labelfor="course.description"class="field">课程介绍:</label><input
14type="text"id="course.description"name="course.description"size="20"
15value="${courseInfo.course.description}"class="required"/>
16</div>
17
18<div>
19<labelfor="teacher.name"class="field">老师姓名:</label><input
20type="text"id="teacher.name"name="teacher.name"size="20"
21value="${courseInfo.teacher.name}"class="required"/>
22</div>
23<div>
24<labelfor="teacher.email"class="field">老师Email:</label><input
25type="text"id="teacher.email"name="teacher.email"size="20"
26value="${courseInfo.teacher.email}"class="required"/>
27</div>
28</fieldset>
29</form:form>
注意:加前缀来区分
controller的实现CourseAction.java如下:
1packagecom.micmiu.demo.web.v2.demo.action;
2
3importjava.util.Collections;
4importjava.util.HashMap;
5importjava.util.Map;
6
7importorg.springframework.stereotype.Controller;
8importorg.springframework.ui.Model;
9importorg.springframework.web.bind.annotation.RequestMapping;
10importorg.springframework.web.bind.annotation.ResponseBody;
11importorg.springframework.web.servlet.ModelAndView;
12importorg.springframework.web.servlet.mvc.support.RedirectAttributes;
13
14importcom.micmiu.demo.web.v2.demo.entity.Course;
15importcom.micmiu.demo.web.v2.demo.entity.Student;
16importcom.micmiu.demo.web.v2.demo.entity.Teacher;
17importcom.micmiu.demo.web.v2.demo.vo.CourseInfo;
18
19/**
20*
21*@author<ahref="http://www.micmiu.com">MichaelSun</a>
22*/
23@Controller
24@RequestMapping(value="/demo/course.do")
25publicclassCourseAction{
26
27@RequestMapping(params={"method=list"})
28publicStringlist(Modelmodel){
29return"course.list";
30}
31
32@RequestMapping(params={"method=save"})
33@ResponseBody
34publicStringsave(Modelmodel,ModelAndViewmv,CourseInfocourseInfo,
35RedirectAttributesredirectAttributes){
36System.out.println("course>>"+courseInfo.getCourse());
37System.out.println("teacher>>"+courseInfo.getTeacher());
38Stringmessage="save";
39redirectAttributes.addFlashAttribute("message",message);
40returnmessage;
41}
42
43}
controller中的部分方法省略,这里主要测试下页面数据绑定的结果,测试过程如下:
表单输入内容如下图:



提交后,控制台输出日志如下:
course>>com.micmiu.demo.web.v2.demo.entity.Course@1fa1838[name=课程名称,description=课程介绍,id=<null>]
teacher>>com.micmiu.demo.web.v2.demo.entity.Teacher@4c2c86[name=老师姓名,email=老师Email,grade=<null>,id=<null>]

从日志中可以看出:创建父级对象后,利用前缀区分的方式可以实现多个对象的数据准确绑定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: