JSP로 커스텀 태그를 만들면서 한 삽집을 소개하려 합니다.
커스텀 태그에는 다음처럼 인자를 넘길 수 있습니다.
<%@ attribute name="groupList" required="true" rtexprvalue="true" %>
이름에서 미루어 짐작하듯이 groupList는 ArrayList 형입니다. 그런데 커스텀태그 내에서 <c:forEach>태그가 먹지 않아 한참을 헤맸습니다. 답답해서 forEach 구문을 지우고 ${groupList.class.name}을 넣어보니... 'String' 타입이라고 나왔습니다. 세상에 -_-;; String이어서 forEach가 돌지 않은 것은 당연하지만, 왜 ArrayList가 아니고 String인지.
J2EE 문서를 보니, attribute에 옵션으로 쓸 수 있는 속성이 하나 있었습니다. type ㅠ.ㅠ. 이 type을 명시하지 않으면 기본으로 String이라고 가정하는 것이 문제 원인이었습니다. groupList가 커스텀태그로 넘어오면서 String으로 바뀐 것입니다. (groupList.toString())
다른 커스텀태그를 보니, 공교롭게도 지금까지 String만 넘겼습니다. 흐. ^^ (사실은 int도 넘겼지만 화면에 찍으면 int인지 String인지 구분이 안돼죠)
문제의 코드는 아래처럼 고쳐 적으면 됩니다.
<%@ attribute name="groupList" type="java.util.List" required="true" rtexprvalue="true" %>
추가로,
개발자는 자바로 업무로직 객체를 개발하고 디자이너가 EL을 익혀 디자인을 입히면 된다는 몇몇 JSP/EL 망상가들의 말이 떠올랐습니다. 저는 업무 영역을 자바 업무로직 개발자, UI 개발자(벨로시티, JSP/EL, 프리마커 등등), HTML 코더(웹표준 준수 노력), (포토샵을 쓰는)디자이너 이렇게 나누는 것이 맞다고 생각합니다.

jstl-1_2-mrel2-spec.pdf