-
JSP - 커스텀 태그 만들기프로그래밍/JSP 2021. 11. 11.반응형
커스텀 태그를 정의할 tld 파일의 경로 : webapp - WEB-INF - views
myTag.tld의 내용
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN""http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd"><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>myTag</short-name><tag><name>hello</name><tag-class>com.tag.HelloTag</tag-class><body-content>empty</body-content></tag><tag><name>sum</name><tag-class>com.tag.SumTag</tag-class><body-content>empty</body-content><attribute> <!-- 태그 속성 정의 --><name>num</name><required>true</required> <!-- 필수 여부 --><rtexprvalue>true</rtexprvalue> <!-- EL등 사용 가능 여부(동적 처리) --><type>int</type></attribute></tag><tag><name>for</name><tag-class>com.tag.ForTag</tag-class><body-content>JSP</body-content><attribute><name>begin</name><required>true</required><rtexprvalue>true</rtexprvalue><type>Integer</type></attribute><attribute><name>end</name><required>true</required><rtexprvalue>true</rtexprvalue><type>Integer</type></attribute><attribute><name>step</name><required>false</required><rtexprvalue>true</rtexprvalue><type>Integer</type></attribute><attribute><name>var</name><required>true</required><rtexprvalue>false</rtexprvalue> <!-- el 사용 여부임 --><type>String</type></attribute></tag><tag><name>each</name><tag-class>com.tag.ForEachTag</tag-class><body-content>JSP</body-content><attribute><name>var</name><required>true</required><rtexprvalue>false</rtexprvalue><type>String</type></attribute><attribute><name>items</name><required>true</required><rtexprvalue>true</rtexprvalue><type>java.util.List</type></attribute></tag></taglib>JSP 파일에서의 실행 방법
<%@page import="com.tag.User"%><%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@ page contentType="text/html; charset=UTF-8"%><%@ page trimDirectiveWhitespaces="true" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@ taglib prefix="my" uri="/WEB-INF/myTag.tld" %><%List<User> list = new ArrayList<>();list.add(new User("이자바", 23));list.add(new User("홍자바", 22));list.add(new User("다자바", 25));// pageContext : 현재 JSP 페이지에 대한 설정 정보를 가지고 있는 객체pageContext.setAttribute("list", list);%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><link rel="icon" href="data:;base64,iVBORw0KGgo="></head><body><h3>커스텀 태그</h3><p><my:hello/></p><hr><p>속성이 있는 태그</p><p>1~100까지 합 : <my:sum num="100"/></p><hr><p>몸체가 있는 태그</p><p><c:forEach var="n" begin="1" end="10" step="2">${n} | </c:forEach></p><p><my:for var="n" begin="1" end="10" step="2">${n} | </my:for></p><hr><p>forEach</p><p><c:forEach var="vo" items="${list }">${vo.name } | ${vo.age } <br></c:forEach></p><hr><p><my:each var="vo" items="${list }">${vo.name } | ${vo.age } <br></my:each></p></body></html>myTag.tld에서 정의했던 내용을 JSP 파일에서 사용 하는 것.
JSP 파일 맨위에서 taglib 정의를 해야한다.
2번째 방법
그리고 커스텀 태그를 직접적으로 어떤 기능을 넣을건지 .tag파일의 위치 : webapp - WEB-INF - tags
now.tag의 파일 내용
<%@tag import="java.util.Calendar"%><%@ tag pageEncoding="UTF-8"%><%@ tag body-content="empty" %><%@ tag trimDirectiveWhitespaces="true" %><%Calendar cal = Calendar.getInstance();String s = String.format("%tF %tT", cal, cal);%><%-- 태그파일 : 단순태그 --%><%=s %>맨 윗줄에 tag내용들을 추가해야 한다.
trim~ = 불필요한 공백을 없앰
이걸 실제로 JSP 파일에서 사용 하는 방법은
<%@ page contentType="text/html; charset=UTF-8"%><%@ page trimDirectiveWhitespaces="true" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><link rel="icon" href="data:;base64,iVBORw0KGgo="></head><body><h3>태그 파일</h3><p>지금 시간은 <tf:now/></p><hr><p>속성이 있는 태그</p><div><tf:header title="안녕하세요"/></div><div><tf:header title="자바" level="3"/></div></body></html>위에 taglib에서 tf로 이름을 줬으니 tf:now로 now 파일의 내용을 가져 올 수 있다.
now에는 현재 시간을 구하는 객체와 변수가 담겨있다.
속성이 있는 태그의 경우
header.tag의 파일 내용
<%@ tag language="java" pageEncoding="UTF-8"%><%@ tag body-content="empty" %><%@ tag trimDirectiveWhitespaces="true" %><%@ attribute name="title" required="true" %><%@ attribute name="level" type="Integer" %><%-- 속성이 있는 태그 --%><%String s = null, e = null;if(level == null || level <= 1) {s = "<h1>";e = "</h1>";} else if(level >= 6) {s = "<h6>";e = "</h6>";} else {s = "<h" + level + ">";e = "</h" + level + ">";}%><%-- 속성값은 EL, 표현식(스크립릿)에서 사용 가능하다. --%><%=s%>${title}<%=e%>jsp 파일에서 속성으로 title을 줘야만 사용이 가능하다.
header.tag 파일에서는 속성이 있다는 전제하에 코드를 짜면 된다.
반응형'프로그래밍 > JSP' 카테고리의 다른 글
JSP - 게시판 페이징 paging (0) 2021.10.18 JSP - EL / JSTL (0) 2021.10.15 JSP - 달력 (0) 2021.10.14 JSP - Parameter 파라미터 전송하기 (0) 2021.10.12 JSP - 전송 방식의 차이 (GET / POST) (0) 2021.10.11