目錄:
- 概述
- 實現方法及測試
[一]、概述
繼前面一篇 springMVC 頁面中多個對象的數據綁定 ,本文主要介紹如果實現復雜類型對象的數據綁定,比如前文中的父級對象CourseInfo 中增加:String[] times , List<Student> studentList 這兩個復雜類型屬性,頁面中數據如何才能准確綁定到對象上呢?
[二]、實現方法及測試
CourseInfo.java 修改成如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package com.micmiu.demo.web.v2.demo.vo;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import com.micmiu.demo.web.v2.demo.entity.Course;
import com.micmiu.demo.web.v2.demo.entity.Student;
import com.micmiu.demo.web.v2.demo.entity.Teacher;
/**
* 課程信息(view層)
*
* @author <a href="http://www.micmiu.com">Michael Sun</a>
*/
public class CourseInfo {
// 課程介紹
private Course course;
// 老師信息
private Teacher teacher;
// 上課時間
private String[] times;
// 學生列表
private List<Student> studentList;
public Course getCourse() {
return course;
}
public Teacher getTeacher() {
return teacher;
}
public void setCourse(Course course) {
this.course = course;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public String[] getTimes() {
return times;
}
public List<Student> getStudentList() {
return studentList;
}
public void setTimes(String[] times) {
this.times = times;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
|
Student.java :
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package com.micmiu.demo.web.v2.demo.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.apache.commons.lang3.builder.ToStringBuilder;
import com.micmiu.demo.web.v2.base.entity.IdEntity;
/**
* 學生信息
*
* @author <a href="http://www.micmiu.com">Michael Sun</a>
*/
@Entity
@Table(name = "T_DEMO_STUDENT")
public class Student extends IdEntity {
@Column(name = "NAME")
private String name;
@Column(name = "EMAIL")
private String email;
@Column(name = "CLASS_NAME")
private String className;
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getClassName() {
return className;
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
public void setClassName(String className) {
this.className = className;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
|
view 層頁面修改成如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<form:form id="input-form" modelAttribute="courseInfo"
action="${ctx}/demo/course.do?method=save" method="post">
<input type="hidden" name="id" value="${course.id}" />
<fieldset class="prepend-top">
<legend>課程信息</legend>
<div id="messageBox" class="error-msg" style="display: none">輸入有誤,請先更正。</div>
<div>
<label for="course.name" class="field">課程名稱:</label> <input
type="text" id="course.name" name="course.name" size="20"
value="${courseInfo.course.name}" class="required" />
</div>
<div>
<label for="course.description" class="field">課程介紹:</label> <input
type="text" id="course.description" name="course.description"
size="20" value="${courseInfo.course.description}" class="required" />
</div>
<div>
<label for="teacher.name" class="field">老師姓名:</label> <input
type="text" id="teacher.name" name="teacher.name" size="20"
value="${courseInfo.teacher.name}" class="required" />
</div>
<div>
<label for="teacher.email" class="field">老師Email:</label> <input
type="text" id="teacher.email" name="teacher.email" size="20"
value="${courseInfo.teacher.email}" class="required" />
</div>
<div>
<label for="times" class="field">上課時間:</label> <input type="text"
id="times[0]" name="times" size="20" value="周一" class="required" />
<input type="text" id="times[1]" name="times" size="20" value="周三"
class="required" /> <input type="text" id="times[2]" name="times"
size="20" value="周五" class="required" />
</div>
<div>
<label for="studentList[0].name" class="field">學生1姓名:</label> <input
type="text" id="studentList[0].name" name="studentList[0].name" size="20"
value="學生1姓名" class="required" />
</div>
<div>
<label for="studentList[0].email" class="field">學生1Email:</label> <input
type="text" id="studentList[0].email" name="studentList[0].email" size="20"
value="學生1Email" class="required" />
</div>
<div>
<label for="studentList[1].name" class="field">學生2姓名:</label> <input
type="text" id="studentList[1].name" name="studentList[1].name" size="20"
value="學生2姓名" class="required" />
</div>
<div>
<label for="studentList[1].email" class="field">學生2Email:</label> <input
type="text" id="studentList[0].email" name="studentList[1].email" size="20"
value="學生2Email" class="required" />
</div>
</fieldset>
|
注意:復雜對象在頁面元素中各屬性的定義規則。
controller 對應的 CourseAction.java 實現修改成如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@RequestMapping(params = { "method=save" })
@ResponseBody
public String save(Model model, ModelAndView mv, CourseInfo courseInfo,
RedirectAttributes redirectAttributes) {
System.out.println("course >> " + courseInfo.getCourse());
System.out.println("teacher >> " + courseInfo.getTeacher());
for (String time : courseInfo.getTimes()) {
System.out.println("time >> " + time);
}
for (Student student : courseInfo.getStudentList()) {
System.out.println("student >> " + student);
}
System.out.println("courseInfo >> " + courseInfo);
String message = "save";
redirectAttributes.addFlashAttribute("message", message);
return message;
}
|
controller中的部分方法省略,這里主要測試下頁面數據綁定的結果,測試過程如下:
表單輸入內容如下圖:
提交后,控制台輸出日志如下:
|
1
2
3
4
5
6
7
8
|
course >> com.micmiu.demo.web.v2.demo.entity.Course@e11326[name=課程名稱,description=課程介紹,id=<null>]
teacher >> com.micmiu.demo.web.v2.demo.entity.Teacher@b03bd5[name=老師姓名,email=老師Email,grade=<null>,id=<null>]
time >> 周一
time >> 周三
time >> 周五
student >> com.micmiu.demo.web.v2.demo.entity.Student@13cd6aa[name=學生1姓名,email=學生1Email,className=<null>,id=<null>]
student >> com.micmiu.demo.web.v2.demo.entity.Student@13137a2[name=學生2姓名,email=學生2Email,className=<null>,id=<null>]
courseInfo >> com.micmiu.demo.web.v2.demo.vo.CourseInfo@ce4be6[course=com.micmiu.demo.web.v2.demo.entity.Course@e11326[name=課程名稱,description=課程介紹,id=<null>],teacher=com.micmiu.demo.web.v2.demo.entity.Teacher@b03bd5[name=老師姓名,email=老師Email,grade=<null>,id=<null>],times={周一,周三,周五},studentList=[com.micmiu.demo.web.v2.demo.entity.Student@13cd6aa[name=學生1姓名,email=學生1Email,className=<null>,id=<null>], com.micmiu.demo.web.v2.demo.entity.Student@13137a2[name=學生2姓名,email=學生2Email,className=<null>,id=<null>]]]
|
從日志中可以看出:不管是string數組對象times 還是復雜列表對象 studentList,數據綁定准確無誤。
本文介紹到此結束@Michael Sun.
原創文章,轉載請注明: 轉載自micmiu – 軟件開發+生活點滴[ http://www.micmiu.com/ ]
本文鏈接地址: http://www.micmiu.com/j2ee/spring/springmvc-view-complex/
pring mvc 接收對象數組
開發中遇到這種需求,需要在后台接收一個對象數組進行添加。 比如添加明細信息。 請問在后台spring mvc 如何接收對象數組,前台通過ajax請求或者 easyUI的 form表單 提交數據都可以。
------解決方案--------------------------------------------------------
input中的name都相同,在后台,用
String[] names = request.getParameterValues("name");// 名稱
String[] moneys = request.getParameterValues("money");// 密碼
.....N行,N=對象中的屬性的個數
然后寫個for循環,按照其中一個數組來循環,
for (int i = 0; i < names.length; i++) {
先new對象,然后根據屬性一次賦值,這些數組中的屬性和前台的順序是一致的
}
------解決方案--------------------------------------------------------
將數組包裝一下
比如你要接收一個Bank類型的數組,那么先建一個類
class BankArray{
private Bank banks[] ;
public void setBanks(Bank[] banks) {
this.banks = banks;
}
public Bank[] getBanks() {
return banks;
}
}
//用 BankArray 作參數
@RequestMapping(value ="xxx" , method = RequestMethod.POST)
public ModelAndView doLogOut(BankArray param){ }
/* 頁面用下面的方式 */
<input name="banks[0].name" value="name1" />
<input name="banks[0].address" value="address1" />
<input name="banks[1].name" value="name2" />
<input name="banks[1].address" value="address2" />
<input name="banks[2].name" value="name3" />
<input name="banks[2].address" value="address3" />
P2P項目中測試確實可以,備忘
