본문 바로가기
JSP

[ JSP ] JSTL Core 사용법

by 정윤재 2012. 1. 21.


1. JSTL core 선언법
JSP 상단에
<%@ taglib prefix="c" uri="
http://java.sun.com/jsp/jstl/core" %>

2. value 가져오는 법
controller 단에서 request.setAttribute("aaa",aaa);
같은 식으로 넣어 줬다면
JSP 단에서 ${aaa) 라고 호출해 주면 된다.
DTO (set,get 메소드방식) 으로 되어 있는 객체의 값을 불러오기 위해선
${aaa.bbb) 이런식으로 참조 방식으로 가져오면 된다.

3. if 문
<c:if test="${TagDTO.TAG_SELECTED!=null && TagDTO.TAG_SELECTED!=''}">
~~~~~
</c:if>

4. 조건문 (if~else 가 choose,otherwise 라는 방식의 태그로 표현된다)
<select name="TAG_NM2">
 <c:forEach var="TagDTO" items="${SecondDefaultList}">
  <c:choose>
   <c:when test="${TagDTO.TAG_SELECTED!=null && TagDTO.TAG_SELECTED!=''}">
     <option value="${TagDTO.TAG_NM}" selected>${TagDTO.TAG_NM}</option>
   </c:when>
   <c:otherwise>
     <option value="${TagDTO.TAG_NM}">${TagDTO.TAG_NM}</option>
   </c:otherwise>
  </c:choose>
 </c:forEach>
</select>

5. 반복문
위의 예제에서 보다 시피 c:forEach 태그로 사용한다.
forEach 태그에는 몇가지 attribute 가 있는데
5-1.  var : 태그 안에서 변수로 사용될 이름 (list 안에 들어가 있을 변수를 표현할 이름임)
5-2. items : list 이름 (위의 예제에서 처럼 request 객체 안에서 list 형식의 변수를 가져오는게 일반적임)
      지원되는 collection 클래스 - Collection, Map, Iterator, Enumeration, Array형식,
5-3. begin : 시작 번호 (list for문 돌릴 시작 index)
5-4. end : 마지막 번호 (list for문 돌릴 마지막 index)
5-5. step : 한번 loop 돌때 index 를 몇개 증가 시킬 것인가(표시 안해주면 1씩 증가됨)
5-6. varStatus : loop 상태를 알아보는 변수
  <c:forEach items="${ProductDTO.tags}" varStatus="status" var="Tags">
  이렇게 설정 하였을 경우 태그 안에서
  ${status.current}   -> 현재 반복 라운드 아이템
  ${status.index}     -> 현재 반복 라운드의 제로 기반(zero-based) 인덱스 (시작이 0부터라는 뜻)
  ${status.count}     -> 현재 반복 라운드의 1 기반(one-based) 인덱스 (시작이 1부터라는 뜻)
  ${status.first}     ->  현재 라운드가 반복을 통한 첫 번째 패스임을 나타내는 플래그(결과는 당연히 true, false 형태)
  ${status.last}      -> 반복현재 라운드가 반복을 통한 마지막 패스임을 나타내는 플래그 (결과는 당연히 true, false 형태)
  ${status.begin}     -> begin 애트리뷰트의 값
  ${status.end}       -> end 애트리뷰트의 값
  ${status.step}      -> step 애트리뷰트의 값
이런 방식으로 사용할 수 있다.
  

  varStatus 는 c:forEach 태그 안의 Attribute에서도 쓸 수 있다.
        예를들어 <c:forEach items="${ProductDTO.tags}" varStatus="status" var="Tags" begin="${status.begin}" end="${status.end}">
 도 가능하다.


댓글