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<StringString>>

 <%
    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

+ Recent posts