< JSTL (JSP Standard Tag Library) > |
JSP View에서 사용할 수 있는 태그 라이브러리
https://www.javatpoint.com/jstl
JSTL 태그 기능 참고 사이트
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
JSTL 라이브러리 다운로드
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
jar파일 WEB-INF\lib 폴더에 추가 후 jsp 파일 상단에 위의 page지시자 추가
게시판 목록 생성
JSTL 사용 전)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%
List<Notice> list = (List<Notice>)request.getAttribute("list");
for(Notice n : list){
pageContext.setAttribute("n", n);
%>
<tr>
<td>${n.id}</td>
<td class="title indent text-align-left"><a href="detail?id=${n.id}">${n.title}</a></td>
<td>${n.writerId}</td>
<td>${n.regdate}</td>
<td>${n.hit}</td>
</tr>
<%} %>
|
cs |
JSTL 사용 후)
1
2
3
4
5
6
7
8
9
|
<c:forEach var="n" items="${list}">
<tr>
<td>${n.id}</td>
<td class="title indent text-align-left"><a href="detail?id=${n.id}">${n.title}</a></td>
<td>${n.writerId}</td>
<td>${n.regdate}</td>
<td>${n.hit}</td>
</tr>
</c:forEach>
|
cs |
JSTL 기능 범주 |
Core
Formating
Functions
SQL
XML
(SQL, XML 기능은 MVC가 나오기 전 쓰던 방식으로 이제는 쓰지 않는 게 좋다)
유용한 JSTL |
<c:set>
<c:remove>
<c:if>
<c:choose>
<c:when>
<c:otherwise>
<c:forEach>
<c:forTokens>
<c:url>
<c:catch>
간단한 for 태그 라이브러리를 만들기 위한 코드 |
ForTag 클래스
TagSupport 상속
+doStartTag
+doEndTag
+doAfterBody
메소드 오버라이드
태그 Descriptor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>control</shortname>
<uri>http://www.abcd.com/jsp/tags/control</uri> // 고유식별자
<info>제어구조 라이브러리</info>
<tag>
<name>for</name>
<tagclass>
com.abcd.web.taglib.ForTag
</tagclass>
<info>반복문</info>
</tag>
</taglib>
|
cs |
파일 path : WEB-INF\{파일명}.tld
JSP에서 JSTL 사용 시
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
uri = 고유식별자, prefix = 고유식별자가 너무 길기 때문에 fix
사용 - <c:for>
JSTL Core 기능 |
1
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
cs |
-page 지시자 추가
<c:forEach> 태그
var="n" 값을 담을 임시변수설정
items="${list}" 저장소에서 꺼내올 배열
begin="0", end="9" 출력할 인덱스 범위
varStatus="st" 반복 중 현재 상태 값 확인
varStatus 속성 사용
%{st.current} 현재 반복되는 아이템
%{st.index} 현재 반복되는 인덱스
%{st.count} 현재 반복 횟수
%{st.first} 현재 아이템이 첫번째면 true
%{st.last} 현재 아이템이 마지막이면 true
%{st.begin} begin 속성에 설정한 값
%{st.end} end 속성에 설정한 값
%{st.step} 반복되는 인덱스의 증가치 (기본:1) (for문의 i++ 구간)
<c:set 태그>
-지역 변수를 만들 수 있다
<c:set var="page" value="${param.p}">
<c:if 태그>
-if 문, else 문은 없다
<c:if test="${조건식}">
실행 할 코드
</c:if>
JSTL 사용하여 pager 번호 생성해보기 |
1
2
3
4
5
6
7
8
|
<c:set var="page" value="${(empty param.p)?1:param.p}" />
<c:set var="startNum" value="${page-(page-1)%5}" />
<ul class="-list- center">
<c:forEach var="i" begin="0" end="4">
<li><a class="-text- orange bold" href="?p=${startNum+i}&t=&q=">${startNum+i}</a></li>
</c:forEach>
</ul>
|
cs |
현재 get으로 전달되는 page parameter를 매개로 page의 첫번째 숫자를 구한다.
${(empty param.p)?1:param.p} null일시 기본값을 1페이지로 해서 기본 게시판 페이지의 NullException을 막고
전달되어온 parameter를 기반으로 ${page-(page-1)%5}를 계산해 요청된 parameter의 첫번째 페이지를 구한다
아래에서 forEach로 반복하며 요청 시의 parameter 값 정의와 페이지 번호를 출력하는 용도로 써먹는다
JSTL 사용하여 추가로 pager 버튼 만들어보기 |
1
|
<c:set var="LastNum" value="23" />
|
cs |
-MAX 페이지 수 임시 값 등록
다음 버튼
1
2
3
4
5
6
7
8
|
<div>
<c:if test="${startNum+5 < LastNum}">
<a href="?p=${startNum+5}&t=&q=" class="btn btn-next">다음</a>
</c:if>
<c:if test="${startNum+5 >= LastNum}">
<span class="btn btn-next" onclick="alert('다음 페이지가 없습니다.');">다음</span>
</c:if>
</div>
|
cs |
이전 버튼
1
2
3
4
5
6
7
8
|
<div>
<c:if test="${startNum > 1}">
<a href="?p=${startNum-1}&t=&q=" class="btn btn-prev">이전</a>
</c:if>
<c:if test="${startNum <= 1}">
<span class="btn btn-prev" onclick="alert('이전 페이지가 없습니다.');">이전</span>
</c:if>
</div>
|
cs |
JSTL forTokens로 첨부파일 목록 출력하기 |
(현재 Db에 파일명1.확장자1,파일명2,확장자2,파일명3,확장자3 형태로 커밋 해둔 상태)
1
2
3
4
5
6
7
8
9
10
11
|
<tr>
<th>첨부파일</th>
<td colspan="3" style="text-align:left; text-indent:10px;">
<c:forTokens var="fileName" items="${n.files}" delims="," varStatus="st">
<a href="${fileName}">${fileName}</a>
<c:if test="${!st.last}">
/
</c:if>
</c:forTokens>
</td>
</tr>
|
cs |
JSTL Format 기능 |
1
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
cs |
-page 지시자 추가
JSTL format 태그로 날짜 형식 변경하기
1
|
<td><fmt:formatDate pattern="yyyy-MM-dd hh:mm:ss" value="${n.regdate}" /></td>
|
cs |
JSTL format 태그로 숫자 형식 변경하기
1
|
<td><fmt:formatNumber value="${n.hit}" /></td>
|
cs |
-기본 형식은 세 자릿수 마다 , 로 끊음
https://www.javatpoint.com/jstl-fmt-formatnumber-tag
-참고 주소
JSTL functions 기능 |
https://www.javatpoint.com/jstl-function-tags
-참고 주소
사용예)
1
2
3
4
5
6
7
8
9
10
|
<c:forTokens var="fileName" items="${n.files}" delims="," varStatus="st">
<c:set var="style" value="" />
<c:if test="${fn:endsWith(fileName, '.zip')}">
<c:set var="style" value="font-weight:bold; color:red;"/>
</c:if>
<a href="${fileName}" style="${style}">${fn:toUpperCase(fileName)}</a>
<c:if test="${!st.last}">
/
</c:if>
</c:forTokens>
|
cs |
${fn:endsWith()}
-문자열 끝 찾아서 boolean 반환 (아이콘 등을 붙이는 데 사용할 수 있음)
${fn:toUpperCase()}
-대문자 변환
'Development > Java' 카테고리의 다른 글
Servlet / Jsp admin page #10 (0) | 2022.08.22 |
---|---|
JDBC 제어 oracleDB SQL 게시판용 몇개 #9 (0) | 2022.08.21 |
JSP, EL 보충 #7 (0) | 2022.08.15 |
JSP EL(Expression Language) #6 (0) | 2022.08.14 |
JSP MVC model #5 (0) | 2022.08.14 |