코딩항해기
[JSP] 커스텀 태그, 사용자 지정 태그 본문
커스텀 태그
스크립트 요소가 많아질 수록 JSP코드는 복잡해진다.
이러한 문제를 해결하기 위해 액션태그, JSTL, EL을 사용하지만 여전히 아쉬울 때 직접 태그를 제작할 수 있다.
이때 직접 제작한 태그를 커스텀 태그, 사용자 지정 태그라고 한다.
한 번 작성한 커스텀 태그는 재사용성이 높고, JSP코드의 가독성을 높이며, java언어를 모르는 다른 개발자와 협업할 때도 해당 태그 사용으로 해당 파트를 구현할 수 있다.
선언 (Core)
태그를 사용하기 위해서는 JSTL처럼 상단에 선언을 먼저 해야한다.
JSTL과 동일하게 코어 태그를 사용하며 사이트와 연결하는 것이 아니라 tag 폴더와 연결하는 것이므로 tagdir 속성을 사용한다.
<%@ taglib tagdir="/WEB-INF/tags(태그파일 위치)" prefix="태그를 표시할 변수명">
예시
JSP tag (WEP-INF 하위의 tags 폴더 안에 생성 후 작성)
<%@ tag language="java" pageEncoding="UTF-8"%>
<h1>커스텀 태그에서 출력하는 메세지입니다! :ㅇ</h1>
커스텀 태그를 호출하는 JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="mytag" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>커스텀 태그 실습</title>
</head>
<body>
<mytag:hello></mytag:hello>
</body>
</html>
화면
태그로 값 넘기기 (매개변수 설정)
몸체 내용으로 값을 전달하는 방식
<jsp:dobody></jsp:dobody>
태그를 사용해 호출하는 쪽에서 커스텀 태그 안에 작성한 내용을 태그로 넘겨 받을 수 있다.
값을 넘겨주는 JSP파일에서는 커스텀 태그 안에 내용을 작성하고,
값을 받는 태그에서는 알맞은 위치에 jsp:dobody 태그를 작성하면 된다.
<%@ tag language="java" pageEncoding="UTF-8"%>
<table>
<tr>
<td><jsp:doBody/></td>
<td>외부에서 값 받아오기
태그 바디에 넣어준 값을 받아올 수 있다.</td>
</tr>
</table>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="mytag" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>커스텀 태그 실습</title>
</head>
<body>
<mytag:table>태그바디영역 메세지를 넣으면 doBody 액션 태그를 통해 출력할 수 있다.</mytag:table>
</body>
</html>
JSP:attribute를 통해 값을 전달하는 방식
몸체 안의 내용을 전달하는 것 외에도 값도 따로 전달할 수 있다.
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ attribute name="border" %>
<%@ attribute name="bgcolor" %>
<table border="${border}" bgcolor="${bgcolor}">
<tr>
<td><jsp:doBody/></td>
<td>외부에서 값 받아오기
태그 바디에 넣어준 값을 받아올 수 있다.</td>
</tr>
</table>
상단에 attribute name 속성으로 받아오는 값의 명칭을 설정해준다음 EL식으로 값을 받아 넣을 수 있다.
태그를 호출하는 쪽에서는 해당 attribute 값을 태그 속성을 통해 넘겨야한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="mytag" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>커스텀 태그 실습</title>
</head>
<body>
<mytag:table border="1" bgcolor="lightblue"></mytag:table>
<mytag:table border="1" bgcolor="lightpink">태그바디영역 메세지를 넣으면 doBody 액션 태그를 통해 출력할 수 있다.</mytag:table>
</body>
</html>
이렇게 작성할 경우 object 타입으로 넘어가기 때문에, ArrayList, DTO 등의 타입이 정해져야할 경우, attribute 태그에 별도 속성 값을 설정해줄 수 있다.
<%@ attribute name="bgcolor" type="자료형" %>
dynamic-attribute
기본적으로 attribute디렉티브로 정의하지 않은 속성을 사용해야 할 경우 dynamic-attribute사용한다.
범용적으로 사용하기 위해 임의의 속성을 설정할 수 있어야 하고, 상황에 따라 동적으로 속성 기능 사용해야 한다.
모든 동적 속성은 java.util.Map타입의 EL변수에 저장되므로, 동적으로 지정한 속성들은 Map타입의 EL변수를 통해 접근할 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="mytag" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>커스텀 태그 실습</title>
</head>
<body>
<mytag:table attr1="1" attr2="lightblue"></mytag:table>
</body>
</html>
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ attribute name="attr1" %>
<%@ tag dynamic-attributes="other"%>
${attr1}<br>
${other.attr2}
(화면)
1
lightblue
잘 정리된 이미지가 있어 첨부했다.
'JSP' 카테고리의 다른 글
[JSP] 내장 객체 (request, session, application) (0) | 2024.08.17 |
---|---|
[JSP] xml 파일로 error 페이지 설정하기 (0) | 2024.08.14 |
[JSP] EL식, JSTL (0) | 2024.08.14 |
[JSP] header, footer 넣기 (0) | 2024.08.09 |
[JSP] JDBCUtil 템플릿 정리 (0) | 2024.08.09 |