1. 몸체 내용 처리
① EL과 태그를 처리한 몸체 내용 사용하기
- tag 디렉티브의 body-content 속성값을 scriptless로 지정
- <jsp:doBody> 액션 태그를 이용하여 몸체 내용을 출력하거나 EL 변수로 저장
<%@ tag body-content="scriptless" %>
<!-- 몸체로 전달 받은 내용을 사용 -->
<jsp:doBody />
<예시>
- 태그 파일 (HTML 태그를 제거해주는 기능)
<%@ tag body-content="scriptless" pageEncoding="UTF-8"%>
<%@ attribute name="length" type="java.lang.Integer" %>
<%@ attribute name="trail" %>
<%@ attribute name="trim" %>
<%-- 몸체로 전달받은 내용을 var 속성으로 지정한 EL 변수에 저장 --%>
<jsp:doBody var="content" scope="page" />
<%
//jspContext 기본 객체의 content 속성 값을 읽어옴
String content = (String) jspContext.getAttribute("content");
if(trim != null && trim.equals("true")) {
content = content.trim();
}
//정규 표현식을 사용해서 content에서 태그를 삭제
content = content.replaceAll(
"<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", "");
if(length != null && length.intValue() > 0 &&
content.length() > length.intValue()) {
content = content.substring(0, length.intValue());
if(trail != null) {
content = content + trail;
}
}
%>
<%= content %>
- 태그 파일을 사용하는 JSP 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>removeHtml</title>
</head>
<body>
<c:set var="dateEL" value="<%= new Date() %>" />
<tf:removeHtml trim="true">
<font size="10">현재 <style>시간</style>은 ${dateEL} 입니다.</font>
</tf:removeHtml>
<br>
<%-- 문자열이 length 설정값인 15 길이 까지만 출력되고 그 다음부터는 trail 속성값으로 나옴 --%>
<tf:removeHtml length="15" trail="..." trim="true">
<u>현재 시간</u>은 <b>${dateEL}</b> 입니다.
</tf:removeHtml>
<br>
<%-- 문자열이 length 설정값인 15 길이 까지만 출력됨 --%>
<tf:removeHtml length="15">
<jsp:body><u>현재 시간</u>은 <b>${dateEL}</b> 입니다. </jsp:body>
</tf:removeHtml>
</body>
</html>
② 몸체 내용 자체를 데이터로 사용하기
: tag 디렉티브의 body-content 속성의 값을 tagdependent로 지정
③ 몸체 내용을 반복적으로 사용하기
: <jsp:doBody> 액션 태그를 반복적으로 실행
<예시>
- 태그 파일
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag trimDirectiveWhitespaces="true" %>
<%@ attribute name="count" required="true" type="java.lang.Integer" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach begin="${1}" end="${count}">
<jsp:doBody /> <%-- 몸체로 전달 받은 내용을 그대로 출력 --%>
</c:forEach>
- 태그 파일을 사용하는 JSP 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>multiple 태그 사용</title>
</head>
<body>
<c:set var="num" value="${1}" /> <%-- num 변수를 만들어 1 저장 --%>
<tf:multiple count="10"> <%-- multiple 함수를 10 까지 사용 --%>
${num} <br>
<c:set var="num" value="${num+1}" /> <%-- num 변수에 num+1 하여 출력--%>
</tf:multiple>
</body>
</html>
'JSP/Servlet > 12. 커스텀 태그 만들기' 카테고리의 다른 글
Day 59 : 변수 생성 (0) | 2022.01.07 |
---|---|
Day 58 : 커스텀 태그 (0) | 2022.01.06 |