摘要:转载自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
1 | packagecom.micmiu.demo.web.v2.demo.entity; |
3 | importjavax.persistence.Column; |
4 | importjavax.persistence.Entity; |
5 | importjavax.persistence.Table; |
7 | importorg.apache.commons.lang3.builder.ToStringBuilder; |
9 | importcom.micmiu.demo.web.v2.base.entity.IdEntity; |
14 | *@author<ahref="http://www.micmiu.com">MichaelSun</a> |
17 | @Table(name="T_DEMO_COURSE") |
18 | publicclassCourseextendsIdEntity{ |
23 | @Column(name="DESCRIPTION") |
24 | privateStringdescription; |
30 | publicStringgetDescription(){ |
34 | publicvoidsetName(Stringname){ |
38 | publicvoidsetDescription(Stringdescription){ |
39 | this.description=description; |
43 | publicStringtoString(){ |
44 | returnToStringBuilder.reflectionToString(this); |
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" |
2 | action="${ctx}/demo/course.do?method=save"method="post"> |
3 | <inputtype="hidden"name="id"value="${course.id}"/> |
4 | <fieldsetclass="prepend-top"> |
6 | <divid="messageBox"class="error-msg"style="display:none">输入有误,请先更正。</div> |
8 | <labelfor="course.name"class="field">课程名称:</label><input |
9 | type="text"id="course.name"name="course.name"size="20" |
10 | value="${courseInfo.course.name}"class="required"/> |
13 | <labelfor="course.description"class="field">课程介绍:</label><input |
14 | type="text"id="course.description"name="course.description"size="20" |
15 | value="${courseInfo.course.description}"class="required"/> |
19 | <labelfor="teacher.name"class="field">老师姓名:</label><input |
20 | type="text"id="teacher.name"name="teacher.name"size="20" |
21 | value="${courseInfo.teacher.name}"class="required"/> |
24 | <labelfor="teacher.email"class="field">老师Email:</label><input |
25 | type="text"id="teacher.email"name="teacher.email"size="20" |
26 | value="${courseInfo.teacher.email}"class="required"/> |
注意:加前缀来区分
controller的实现CourseAction.java如下:
1 | packagecom.micmiu.demo.web.v2.demo.action; |
3 | importjava.util.Collections; |
4 | importjava.util.HashMap; |
7 | importorg.springframework.stereotype.Controller; |
8 | importorg.springframework.ui.Model; |
9 | importorg.springframework.web.bind.annotation.RequestMapping; |
10 | importorg.springframework.web.bind.annotation.ResponseBody; |
11 | importorg.springframework.web.servlet.ModelAndView; |
12 | importorg.springframework.web.servlet.mvc.support.RedirectAttributes; |
14 | importcom.micmiu.demo.web.v2.demo.entity.Course; |
15 | importcom.micmiu.demo.web.v2.demo.entity.Student; |
16 | importcom.micmiu.demo.web.v2.demo.entity.Teacher; |
17 | importcom.micmiu.demo.web.v2.demo.vo.CourseInfo; |
21 | *@author<ahref="http://www.micmiu.com">MichaelSun</a> |
24 | @RequestMapping(value="/demo/course.do") |
25 | publicclassCourseAction{ |
27 | @RequestMapping(params={"method=list"}) |
28 | publicStringlist(Modelmodel){ |
32 | @RequestMapping(params={"method=save"}) |
34 | publicStringsave(Modelmodel,ModelAndViewmv,CourseInfocourseInfo, |
35 | RedirectAttributesredirectAttributes){ |
36 | System.out.println("course>>"+courseInfo.getCourse()); |
37 | System.out.println("teacher>>"+courseInfo.getTeacher()); |
39 | redirectAttributes.addFlashAttribute("message",message); |
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>]
从日志中可以看出:创建父级对象后,利用前缀区分的方式可以实现多个对象的数据准确绑定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理