728x90
태그 라이브러리 | 선언문 |
Core (기본) | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> |
XML | <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> |
I18N (국제화) | <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
Database | <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> |
Functions (기타 함수) | <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> |
★ JSTL ( JSP Tag Library )
<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
JSTL core의 태그들
<c:set> | 변수명에 값을 할당 변수를 다룰때 사용한다. 이 태그로 생성한 변수는 JSP의 로컬 변수가 아니라 서블릿 보관소(JspContext, ServletRequest, H ttpSession, ServletContext)에 저장된다. scope의 기본값은 page이다. 따라서 scope를 생략하면 JspContext에 저장된다. |
<c:out> | 값을 출력 value에 EL 표현식을 쓸 수 있다. value 값이 null이면 기본값이 출력되고 기본값이 없으면 빈 문자열이 출력된다. |
<c:if> | 조건식에 해당하는 블럭과 사용될 scope설정 |
<c:choose> | 다른 언어의 switch와 비슷 |
<c:when> | switch문의 case에 해당 |
<c:otherwise> | switch문의 default에 해당 |
<c:forEach> | 다른언어의 loop문 items 속성에 배열을 할당할 수 있음 |
<c:set > <c:out>
<c:set>
<c:set target="대상 객체" property="설정할 프로퍼티" value="프로퍼티 값" />
EL에서 사용되어질 수 있는 Bean, Map등에 값을 설정을 하거나,
일반 변수를 생성해서 값을 할당 할 수 있습니다.
- value 속성 : 값을 입력합니다. EL을 사용할 수 있습니다.
- target 속성 : 프로퍼티를 설정할 빈 또는 맵을 가집니다.
- property 속성 : 설정할 프로퍼티 입니다.
- var 속성 : 값이 저장되는 변수명 입니다.
- scope 속성 : 변수가 저장된 Scope 입니다.
page(기본), request, session, application 을 가질 수 있습니다.
1. Bean에 값을 할당
model.addAttribute("board", new Board());
<c:set target="${board}" property="title" value="제목을 변경합니다." />
<c:out value="${board.title}" />
2. Map을 사용
model.addAttribute("map", new HashMap<String, String>());
<c:set target="${map}" property="title" value="맵에 제목을 입력합니다." />
<c:out value="${map.title}" />
3. 일반적인 변수
<c:set var="title" value="제목 입니다." />
<c:out value="${title}" />
4. JSP 스크립틀릿에서 EL에서 사용할 수 있도록 변수를 설정
<%
String title = "스크립틀릿 제목입니다.";
pageContext.setAttribute("title", title);
%>
<c:out value="${title}" />
<c:redirect>
<c:redirect url="url경로" context="컨텍스트 경로"/>
context 속성은 생략 하면, url 속성 값으로 리다이렉트 하고
context 속성을 지정하면, 콘텍스트 경로/url경로 와 같은 형식으로 리다이렉트 됩니다
파라미터를 전달하는 경우
<c:redirect url="/jsp/view.jsp" context="/example">
<c:param name="number" value="10"/>
</c:redirect>
<c:remove>
<c:remove> 태그
보관소에 저장된 값을 제거한다.
<c:remove var="변수명" scope="page(기본값) | request | session | application" />
<c:if>
<c:if>
<c:if test="조건식" var="변수명" scope="page(기본값) | request | session | application">내용</c:if>
- test : 필수 속성으로 속성값으로 EL 비교식을 가집니다.
- var : 조건 결과를 저장할 변수를 지정합니다.
- scope : 조건 결과를 저장할 변수의 저장 scope을 지정합니다.
<c:if test="${name eq '홍길동'}" var="nameHong" scope="session"></c:if>
위 코드는 test 속성의 결과를 nameHong 변수 이름으로 session 영역에 저장
<c:if test="${not empty 대상}">
null 과 "" 은 0이 아니지만 연산시 0 으로 처리
== 또는 eq ( equal ) :: 숫자 0은 eq로 비교해야함.
!= 또는 ne ( not equal )
< 또는 lt ( little )
<= 또는 le ( little or equal )
> 또는 gt ( greater )
>= 또는 ge ( greater or equal )
__________________________________
empty : List 또는 배열이 비었거나 , 문자열이 null , "" 이면 true
not empty
<c:if test="${empty myList}">
<!-- myList가 비어있으면 -->
</c:if>
<c:if test="${not empty myList}">
<!-- myList가 비어있지 않으면 -->
</c:if>
__________________________________
and(&&) , or(||) , not(!)
<c:choose> : stl의 if, esle
<c:choose>
<c:when test="${name eq '김철수'}"> ... </c:when>
<c:when test="${name eq '박영희'}"> ... </c:when>
<c:otherwise> ... </c:otherwise>
</c:choose>
<c:foreach
items="${리스트가 받아올 배열명,변수명}"
var="for문 내부에서 사용할 변수"
begin="시작 인덱스"
end="종료 인덱스"
varStatus="상태용 변수">
반복할 내용 ●●●
</c:foreach>
1. 이름 목록을 가진 ArrayList를 출력
List<String> nameList = new ArrayList<String>(Arrays.asList("홍길동1", "홍길동2", "홍길동3"));
model.addAttribute("nameList", nameList);
<c:forEach var="name" items="${nameList}" varStatus="status">
<p>${status.count} : <c:out value="${name}" /></p>
</c:forEach>
2. 객체가 들어 있는 리스트를 출력
- boardVO 객체의 getTitle() 메소드를 호출
<c:forEach var="boardVO" items="${boardList}">
<p><c:out value="${boardVO.title}" /></p>
</c:forEach>
3. Map 이 들어있는 리스트를 출력
- boardMap 의 get("title") 메소드를 호출한 결과를 출력
<c:forEach var="boardMap" items="${boardList}">
<p><c:out value="${boardMap.title}" /></p>
</c:forEach>
4. 일정 횟수의 루프를 돌면서 값을 출력
<c:forEach var="i" begin="0" end="3">
<p><c:out value="${i}" /></p>
</c:forEach>
5. 증가 단계를 지정
<c:forEach var="i" begin="0" end="3" step="2">
<p><c:out value="${i}" /></p>
</c:forEach>
6. 리스트를 역으로 출력
<c:set var="size" value="${fn:length(nameList)}" />
<c:forEach var="i" begin="1" end="${size}">
<p><c:out value="${nameList[size - i]}" /></p>
</c:forEach>
7. 루프의 상태를 나타내는 varStatus 속성
${status.current} 현재 for문의 해당하는 번호
${status.index} 0부터의 순서
${status.count} 1부터의 순서
${status.first} 첫 번째인지 여부
${status.last} 마지막인지 여부
${status.begin} for문의 시작 번호
${status.end} for문의 끝 번호
${status.step} for문의 증가값
<c:foreach items="${list}" var="list" varStatus="status">
<c:out value="${status.index}" /> / <c:out value="${status.end}" />
</c:foreach>
8. <c:forTokens>
- 문자열을 분리자를 사용해서 분리해서 출력
<c:forTokens var="name" items="홍길동,홍길동2,홍길동3" delims=",">
<p><c:out value="${name}"/></p>
</c:forTokens>
EL을 이용한 단순 객체 호출
<%
String str = "ABCDEFGHIJ";
out.write(str.substring(3));
%>
<br>
<c:set var="str" value="ABCDEFGHIJ"/>
${str.substring(3)}
JSTL을 이용한 해당 value 여러개 찾기 ArrayList<HashMap<String, String>>
<%
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put("dong1", "동1");
map.put("dong2", "동2");
map.put("dong3", "동3");
HashMap<String, String> map2 = new HashMap<String, String>();
map2.put("dong4", "동4");
map2.put("dong5", "동5");
map2.put("dong6", "동6");
list.add(map);
list.add(map2);
request.setAttribute("list", list);
%>
<br>
<c:forEach var="list" items="${list}" varStatus="stat">
<br>
<c:forEach var="entry" items="${list}">
${entry.key}
</c:forEach>
<br>
<c:forEach var="entry" items="${list}">
${entry.value}
</c:forEach>
<br>
</c:forEach>
_________________________________________________________
dong1 dong3 dong2
동1 동3 동2
dong5 dong4 dong6
동5 동4 동6
<%
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put("dong1", "동1");
map.put("dong2", "동2");
map.put("dong3", "동3");
HashMap<String, String> map2 = new HashMap<String, String>();
map2.put("dong4", "동4");
map2.put("dong5", "동5");
map2.put("dong6", "동6");
list.add(map);
list.add(map2);
request.setAttribute("list", list);
%>
<br>
<c:forEach var="list" items="${list}" varStatus="stat">
<c:forEach var="entry" items="${list}">
<c:if test="${entry.value eq '동3' }">
동3 발견<br>
${"key ="+= entry.key +=" value =" += entry.value }<br>
</c:if>
<c:choose>
<c:when test="${entry.value eq '동5' }">
동5 choose <br>
</c:when>
<c:when test="${entry.value eq '동6' }">
동6 choose <br>
</c:when>
</c:choose>
</c:forEach>
</c:forEach>
JSTL을 이용한 Entry 호출
<c:forEach items="${setMenu}" var="menu" varStatus="status">
key : ${menu.key}<BR><BR>
value : ${menu.value} <BR><BR>
</c:forEach>
728x90