개발놀이터
커스텀 태그 만들기 본문
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 |