개발놀이터

커스텀 태그 만들기 본문

Spring/Spring

커스텀 태그 만들기

마늘냄새폴폴 2021. 7. 29. 22:10

1. 커스텀 태그의 장점

①재사용 : 한 번 작성한 커스텀 태그는 어떤 JSP 컨테이너에서도 사용 가능하다.

②쉽고 단순한 JSP 코드 작성 : 자바 코드에 익숙하지 않은 개발자들도 커스텀 태그를 사용하면 쉽게 JSP 페이지를 작성할 수 있게 된다. 예를 들어 JSTL 과 EL을 사용하는 것이 스크립트 코드만 사용하기보다 쉽다.

③코드 가독성 향상 : 커스텀 태그는 뚜렷한 의도를 갖고, 커스텀 태그를 사용하면 스크립트코드를 줄일 수 있기 때문에 JSP코드의 가독성을 높일 수 있다.

 

2. 커스텀태그 사용하기

①WEB-INF파일 아래 원하는 이름으로 파일을 짓는다.

②파일아래 .tag확장자로 jsp파일을 만든다

③맨위에 <%@ tag body-content="empty" pageEncoding="UTF-8" %>를 적는다.

④커스텀 태그를 사용할 페이지에

<%@ taglib prefix="자기가 사용할 태그이름" tagdir="/WEB-INF/태그가 들어있는 파일" %>을 선언해준다.

⑤사용할 페이지에서 <자기가 사용할 태그이름: .tag파일이름>을 쓰면 끝

예를들어 WEB-INF아래 원하는 이름의 파일이 tags이고 자기가 사용할 태그이름이 tf이고 .tag확장자파일이름이 now라면 다음과 같이 적으면 된다.

<%@ taglib prefix="tf" tagdir="/WEB-INF/tags"%>

<tf:now>

 

3-1. 태그파일의 속성 설정 방법

①description : 속성에 대한 설명을 입력한다. (선택)

②name : 속성의 이름을 입력한다. 태그 파일 내에서 스크립트 변수나 EL 변수의 이름으로 사용된다. (필수)

③required : 속성의 필수 여부를 지정한다. 필수일 경우 true 아닌 경우 false를 값으로 지정한다. 기본값을 false이다 (선택)

④rtexprvalue : 속성값으로 표현식을 사용할 수 있는지 여부를 지정한다. 기본값은 true이다. (선택)

⑤type : 속성값의 타입을 명시한다. java.lang.Integer와 같은 래퍼타입을 사용한다. 기본값은 java.lang.String이다. (선택)

(자바의 제네릭과 같은 역할)

⑥fragment  : <jsp:attribute> 액션태그로 속성값을 전달할 때 이값을 true로 지정한다. fragment 속성값을 true로 지정하면 rtexprvalue속성은 true가 되고 type속성의 값은 javax.servlet.jsp.tagext.JspFragment가 된다. (선택)

 

3-2. 속성값을 전달하는 기본 방식

<%-- header.tag --%>

<%@ attribute name="변수이름" required="true" %>

attribute 디렉티브를 이용해서 지정한 속성은 다음과 같이 태그 파일의 스크립트 요소나 EL에서 변수처럼 사용할 수 있다. <c:set var="변수이름" value="값"/> 과 비슷한 역할 하지만 위의 방식은 변수를 설정하기만 한것이고 직접 값을 넣어줘야한다. ex) <tf:header title=<%= article.getTitle() %> />

 

3-3 <jsp:attribute> 태그를 이용한 속성값 전달

arrtibute디렉티브의 fragment 속성값이 true일 경우 JSP는 속성에 값을 전달할때 <jsp:attribute> 액션 태그를 사용해야 한다.

<%-- header.tag --%>

<%@ attribute name="title" fragment="true">

<%-- JSP --%>

<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>

<tf:header>
	<jsp:attribute name="title">${ article.title }</jsp:attribute>
</tf:header>

<jsp:attribute>의 몸체에서는 일반 템플릿 텍스트, EL, 그리고 <jsp:include> 액션 태그등을 사용할 수 있으며, 스크립트 코드는 사용할 수 없다.

 

3-4 동적 속성 전달

상황에 따라서는 attribute의 속성값을 나중에 정하고 싶을 때가 있을 것이다. 

<%@ tag dynimic-attributes="변수이름" %>

<select name="${ name }">

	<c:forEach var="option" items="${ 변수이름 }>

		<option value="${ option.key }">${ option.value }</option>

	</c:forEach>

</select>

이렇게 설정해주면 동적으로 attribute 속성값을 받아 올 수 있다. 

 

3-5 몸체 내용 처리

이 내용은 <c:if>태그와 똑같은 기능을 하는 내용이므로 <c:if>태그를 사용하는것은 선택이다.

<tf:someTagFile attrl="속성값">

몸체내용

</tf:someTagFile>

'Spring > Spring' 카테고리의 다른 글

스프링 빈 생명주기 콜백  (0) 2021.08.16
스프링 @Autowired, @Component, @Qualifier, @Primary  (0) 2021.08.15
스프링빈 조회  (0) 2021.08.13
DI와 스프링빈  (0) 2021.08.13
Spring 테스트클래스  (0) 2021.08.10