아래와 같이 list의 내용을 list로 담아서 바로 던지면
JSP form:form path 으로 해당 list에 있는 값들을 읽지 못한다.
1
2
3
4
5
6
|
// Controller
List<Exam1_order> list = dDAO.getOrderlist();
System.out.println(list.size());
model.addAttribute("list",list );
| cs |
1
2
3
4
5
6
7
8
9
|
// JSP
<form:form action="d1_order_list" modelAttribute="list" method="post" enctype="multipart/form-data">
<td>
<form:input path="no" type="text" class="form-control" readonly="true"/>
</td>
<td><form:input path="item" type="text" readonly="true"/></td>
<td><form:input path="count" type="text" placeholder="물품수량" /></td>
<td><form:input path="price" type="text" placeholder="물품가격" /></td>
</form:form>
| cs |
prevented it from fulfilling this request.
해결하는 방법은 두가지가 있다.
1. form:form 으로 받지 않고 forEach를 통해 받은 리스트를 풀어 준다.
1
2
3
4
5
6
7
8
9
|
// JSP
<c:forEach var="tmp" items="${list}">
<tr>
<th>${tmp.no}</th>
<th>${tmp.item}</th>
<th>${tmp.count}</th>
<th>${tmp.price}</th>
</tr>
</c:forEach>
| cs |
2. form:form 으로 받으려면 새로운 Arraylist VO를 만들어 주어야 한다.
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
|
// Controller
@RequestMapping(value = "/listarray", method = RequestMethod.GET)
public String listarr(Model model) {
MemberList mlist = new MemberList();
List<Member> list = new ArrayList<Member>();
for (int i = 0; i < 5; i++) {
Member mem = new Member();
mem.setCustno(i + 1);
mem.setCustname("a" + i);
list.add(mem);
}
System.out.println(list.size());
model.addAttribute("cmd1", list);
mlist.setMemberlist(list);
model.addAttribute("cmd2", mlist);
return "exam/listarray";
}
@RequestMapping(value = "/listarray", method = RequestMethod.POST)
public String listarr(@ModelAttribute("cmd1") MemberList mlist) {
List<Member> list = mlist.getMemberlist();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getCustno());
}
return "exam/listarray";
}
| cs |
기존 VO 이외의 새로운 ListVO를 만들어 준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// ListVO
package com.ds.vo;
import java.util.ArrayList;
import java.util.List;
public class MemberList {
private List<Member> memberlist = new ArrayList<Member>();
public List<Member> getMemberlist() {
return memberlist;
}
public void setMemberlist(List<Member> memberlist) {
this.memberlist = memberlist;
}
}
| cs |
그런 다음 일반 VO와 새로 만든 ListVO를 생성해 준다.
예제에서는 그냥 vo는 mlist 로 list vo는 list로 이름을 지정해 주었다.
MemberList mlist = new MemberList();
List<Member> list = new ArrayList<Member>();
ListVO에 일반 vo를 담은 후 JSP에 보낸다.
mlist.setMemberlist(list);
model.addAttribute("cmd2", mlist);
JSP에서 form:form 안에 forEach를 사용하여 list안에 있는 내용을 뽑아낸다.
path="memberlist[${i.index}].custno"
memberlist 안 i 번째 index의 custno를 path값으로 지정
1
2
3
4
5
6
7
8
9
10
11
12
|
// JSP
<form:form action="listarray" modelAttribute="cmd2" method="post">
<c:forEach items="${cmd2.memberlist}" varStatus="i">
<form:input type="text" path="memberlist[${i.index}].custno" />
<form:input type="text" path="memberlist[${i.index}].custname" />
</c:forEach>
<input type="submit" />
</form:form>
| cs |
조금 path 값이 길어져서 가독률이 떨어지지만 jsp에서 list를 푸는 방법은 이렇다.
ㅈㄴ 비효율적이네요
답글삭제