Iterate 3 : ArrayList-HashMap을 이용한 Data Collection으로 <logic:iterate> 사용하기 그리고 <logic:notEmpty>태그와<logic:iterate>의 시너지
카테고리 없음 2011. 6. 27. 17:04
4. Iterate 3 : ArrayList-HashMap을 이용한 Data Collection으로 <logic:iterate> 사용하기 그리고 <logic:notEmpty>태그와<logic:iterate>의 시너지
-4강에서는 실전 데이터형태를 사용하고, 예외처리를 하며, 디자인도살짝꾸밈으로서 <logic:iterate>태그를 실전에 적용해보자.
(본 강좌에 사용된 실전소스는 첨부파일을 다운로드받으세요!)
[작동과정]
1. 입력(조회)페이지가 열린다.
2. 입력하고 submit한다.
3. action에서 쿼리를 수행하여 데이터를 가져온다.(본예제에서는 데이터를 하드코딩함)
4. 가져온 데이터Collection를 리스팅한다.
[그림 1,2]


3. Action에서는 ArrayList-HashMap조합으로 데이터를 객체화하여 request에 담습니다.
ArrayList al = new ArrayList();
HashMap row = new HashMap();
row.put("이름","홍길동");
row.put("나이","23");
row.put("주소","서울시 역삼동");
al.add(row);
HashMap row2 = new HashMap();
row2.put("이름","백두산");
row2.put("나이","30");
row2.put("주소","대구시 수성동");
al.add(row2);
HashMap row = new HashMap();
row.put("이름","홍길동");
row.put("나이","23");
row.put("주소","서울시 역삼동");
al.add(row);
HashMap row2 = new HashMap();
row2.put("이름","백두산");
row2.put("나이","30");
row2.put("주소","대구시 수성동");
al.add(row2);
HashMap row3 = new HashMap();
row3.put("이름","진달래");
row3.put("나이","28");
row3.put("주소","부산시 남구 우암동");
al.add(row3);
request.setAttribute("array",al);
row3.put("이름","진달래");
row3.put("나이","28");
row3.put("주소","부산시 남구 우암동");
al.add(row3);
request.setAttribute("array",al);
4. 리스팅시에 notEmpty태그를 iterate태그와 함께 사용합니다.
<logic:notEmpty name="array" >
<logic:iterate name="array" type="java.util.HashMap" id="row" indexId="k">
<tr>
<td>
<b><%=(k.intValue()+1)+""%></b>
</td>
<td>
<%=row.get("이름")%>
</td>
<td>
<%=row.get("나이")%>
</td>
<td>
<%=row.get("주소")%>
</td>
</tr>
</logic:iterate>
</logic:notEmpty>
<logic:iterate name="array" type="java.util.HashMap" id="row" indexId="k">
<tr>
<td>
<b><%=(k.intValue()+1)+""%></b>
</td>
<td>
<%=row.get("이름")%>
</td>
<td>
<%=row.get("나이")%>
</td>
<td>
<%=row.get("주소")%>
</td>
</tr>
</logic:iterate>
</logic:notEmpty>
이렇게 하면 step1에서 본페이지를 열때 array객체가 없더라도 에러가 나지않고 예외를 알리는 String으로 화면을 처리할수 있습니다.
그럼 array객체가 없을때 처리를 해보겠습니다.
<logic:empty name="array" >
<tr>
<td colspan=4 align='center'>
조회버튼을 클릭하세요.
</td>
</tr>
</logic:empty>
<tr>
<td colspan=4 align='center'>
조회버튼을 클릭하세요.
</td>
</tr>
</logic:empty>
이와 같이 <logic:empty>를 사용하여 초기화면을 구성할수 있습니다.
여기서 name속성은 iterate와 마찬가지로 request.getAttribute("!!!");에 오는 !!!명이 오면됩니다.
[그림 결과화면]

[요약]
1. 열-행 방식의 데이터를 ArrayList-HashMap구조와 담아서 <logic:iterate>으로
display하였다.
2. <logic:iterate>태그는 자체적으로 null객체일때의 처리가 없으므로, 예외처리를 위해
객체의 존재유무를 체크한다. 그역할을 하는 태그는 <logic:empty><logic:notEmpty>이며 스크립트릿에서
if-else처리에 해당되는 태그이다.
속성중 name은 attribute객체명을 얻는 키이름이다.
본 블로그는 페이스북 댓글을 지원합니다.