삶 가운데 남긴 기록 AACII.TISTORY.COM
태그 기반 커스텀 태그 본문
태그 기반 커스텀 태그는 클래스 기반 커스텀 태그를 선행으로 학습해야 이해하기 쉽습니다.
jsp파일에 커스텀 태그 기능을 구현한 다음, 확장자를 tag로 지정하면 하나의 커스텀 태그가 작성된 것입니다.
이 .tag파일이 태그 핸들러 클래스 파일(.class)로 변환되어 동작합니다.
커스텀 태그와 .tag 파일이 하나씩 일대일로 매핑되는것입니다.
또한 .tag파일의 파일명이 jsp페이지에서 사용하는 커스텀 태그의 이름이됩니다.
태그 기반 커스텀 태그는 아래와 같은 절차로 사용합니다.
1. tag 파일을 작성합니다. 저장 위치는 /WEB-INF/tags 폴더 혹은 그 하위 폴더만 가능합니다.
2. jsp 페이지에서 커스텀 태그를 사용하기 위한 taglib 지시자를 선언합니다.
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
3. 태그 파일을 커스텀 태그로 사용할 때에는 taglib의 tagdir 속성에 태그 파일들이 위치한 폴더를 지정합니다.
4. tagdir 속성에 지정한 폴더의 태그 파일들은 각각 파일 하나당 하나의 커스텀 태그로 사용됩니다.
tag 지시자
tag 지시자를 사용하는 예를 작성해보겠습니다.
/WEB-INF/ 폴더 아래 tags 폴더를 생성합니다.
tags 폴더 아래 line.tag 와 time.tag 파일을 생성합니다.
line.tag
<%@ tag body-content="empty" pageEncoding="utf-8" %>
<p>
---------------------------------------------------------
</p>
time.tag
<%@ tag body-content="empty" pageEncoding="utf-8" %>
<%@ tag import="java.util.Calendar" %>
<% Calendar date = Calendar.getInstance(); %>
<%= date.get(Calendar.YEAR) %> - <%= date.get(Calendar.MONTH)+1 %> - <%= date.get(Calendar.DATE) %>
WebContent 폴더 아래 ex25.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
<my:line/>
오늘 날짜: <my:time/>
<my:line/>
attribute 지시자
attribute 지시자는 커스텀 태그에서 사용하는 속성을 정의합니다.
name: 속성의 이름
description : 속성의 설명
fragment: 속성 값을 전달 할 때 사용. true 로 지정하면 rtexprvalue 속성값은 false가 됨
required : 필수 인지 여부
rtexprvalue : 속성 값을 표현식을 사용할지 지정
type : 속성의 데이터 타입 지정, 객체로 지정해야 하며 기본값은 String
/WEB-INf/tags 폴더에 sum.tag 파일을 작성합니다.
<%@ tag body-content="empty" pageEncoding="utf-8" %>
<%@ attribute name="num1" required="true" %>
<%@ attribute name="num2" required="true" %>
${num1} + ${num2} = ${num1+num2}
ex26.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
<my:sum num1="23" num2="45" />
variable 지시자
variable 지시자는 EL식에서 사용하는 변수를 선언할 때 사용합니다.
description : 변수 설명
name-from-attribute : attribute로 설정한 내용을 EL에서 사용할 변수로 지정
name-given : EL에서 사용할 변수 이름 지정
scope : 스코프 룰(변수 사용 범위)를 지정합니다. (AT_BEGIN: 시작 태그 부터, NESTED: 시작 태그와 끝 태그 사이, AT_END: 끝태그 이후 부터)
variable-class : 변수의 타입을 지정
태그 몸체 처리
/WEB-INF/tags 폴더 밑에 chart.tag 파일을 작성합니다.
<%@ tag body-content="scriptless" pageEncoding="utf-8" %>
<%@ attribute name="title" required="true" %>
<%@ attribute name="color" required="true" %>
<p>
<table>
<tr>
<th>${title}</th>
</tr>
<tr>
<td bgcolor="${color }"><jsp:doBody /></td>
</tr>
</table>
</p>
ex27.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
<my:chart color="#F4FA59" title="책">
소설<br>
역사<br>
인문<br>
</my:chart>
<my:chart color="#59ADF9" title="운동">
축구<br>
농구<br>
배구<br>
</my:chart>
동적 속성
커스텀 태그의 속성을 사용할 때 <@ attribute %> 태그를 정의한 다음 사용해야합니다.
그런데 속성을 미리 정의하지 않고도 동적으로 지정해서 Map형태로 받아서 사용가능합니다.
dynamic-attributes 속성값은 변수이름을 동적으로 지정된 속성의 이름과 값을 저장하는 Map객체입니다.
<%@ tag dynamic-attributes="map객체이름지정" %>
이런 식으로 사용합니다.
'DEV&OPS > Java' 카테고리의 다른 글
JSTL Formatting (0) | 2022.07.20 |
---|---|
JSTL Core (0) | 2022.07.08 |
클래스 기반 커스텀 태그 JSP 2.1 (0) | 2022.07.06 |
클래스 기반 커스텀 태그 JSP 1.2 (0) | 2022.07.05 |
EL (Expression Language) (0) | 2022.07.01 |