JSTL core library (test: Struts 1.2.9, Servlet 2.3 spec)
Example(Map)
<JstlExampleAction.java>
Map<String, Double> map = new HashMap<String, Double>();
map.put("d0",1.0);
map.put("d1",2.0);
map.put("d2",3.0);
map.put("d3",4.0);
request.setAttribute("varTbl", map);
<jstl.jsp>
<%@ taglib
uri="/WEB-INF/tlds/struts-html-el.tld" prefix="html-el" %>
<%@
taglib uri="http://java.sun.com/jstl/core"
prefix="c" %>
<c:foreach var="entry"
items="${varTbl}">
<c:out value="${entry.key}"/> =
<c:out value="${entry.value}"/>
<br/>
</c:foreach>
Servlet spec 2.4에서는 <c:out value="${entry.key}"/> 대신 ${entry.key}만으로도 출력 가능하다.
이번에는 응용으로 Map에 여러 Key값이 존재할 경우 원하는 Key값만을 검색해서 hidden tag로 값을 넘기는
방법을
살펴보고자 한다. 얼핏 생각에는 ${entry['d'+i]} (여기서 i는 index번호이다) 와 같이하여 value로 넘기면
될
것같지만, 컴파일시 에러가 발생한다. String을 long으로 변환하려는 과정에서 error가 발생하다는 내용의
error메세지
일것이다.
그럼 다른 방법을 강구해보자. 꼼수로 c:set tag를 사용해서 key값을 변수로 저장하여
그 값을 key로 넘겨줘보자.
code는 대략 다음과 같다.
<c:foreach var="i" begin="0"
end="3">
<c:set var="key" value="d${i}"/>
<html-el:hidden property="${key}"
styleId="${key}" value="${varTbl[key]}"/>
</c:foreach>
다행스럽게 이 코드는 작동한다.
출력화면은
<input type="hidden" name="d0" id="d0" value="1.0"/>
<input type="hidden" name="d1" id="d1" value="2.0"/>
<input
type="hidden" name="d2" id="d2" value="3.0"/>
<input type="hidden"
name="d3" id="d3" value="4.0"/>
와 같다. Scriptlet을 사용할 경우 loop제어문을 사용할 수밖에 없는데, 소스가 지저분해지는 것도 막고
후에
유지보수할 때도 도움이 될 것 같다. 개인적으로는 Struts logic:iterate tag를 사용하는 것보다 JSTL core tag
와 EL을 사용하는 것이 편하다. EL사용시 굳이 scope를 지정하지
않아도 충돌하지만 않는다면, 자동으로 해당
Scope를 검색해주고, scriptlet의 사용을 자제할 수 있는 등의 이점이 있다. 그리고 눈치를 챘겠지만,
EL식과 c:foreach 태그를 사용함으로 id속성에 식을 사용한 것 같은 효과를 거둘 수 있다는 점이다.
'# 웹 개발 > 프레임워크' 카테고리의 다른 글
PostgreSQL create table(테이블 생성), type(형식) (0) | 2013.09.01 |
---|---|
PostgreSQL 관련 자료 (0) | 2013.08.31 |
sencha architect - 2.layout과 flex 개념잡기 (0) | 2013.07.18 |
sencha architect - 1. 아키텍트 시작하기 (0) | 2013.07.17 |
spring @ModelAttribute (1) | 2013.06.08 |