tag 파일의 커스텀 태그의 tag 디렉티브의 속성 중 body-content 라는 속성이 존재하는데, 이 속성의 설정으로 몸통태그에 대한 출력과 실행을 관리할 수 있다.
<%@ tag body-content="scriptless" %>
기본 값은 scriptless 이며 empty , tagdependent 로 나뉜다.
-
scriptless는 JSP의 스크립트요소를 제외한 태그들의 실행을 허용한다. JSP스크립트요소가 몸통태그에 있을시 예외가 발생한다.
-
tagdependent는 HTML을 제외한 다른 스크립트 요소들을 text로 간주하고 출력한다.
<body>
<h1>태그 body scriptless</h1>
<my:tagEx1Body>
<p>Hello World</p>
${pageContext.request.contextPath}
<jsp:include page="includeEx3.jsp" />
<!-- <% Object o = new Object();
out.print(o);%>
<%= o %>
<%! int i =0; %> -->
<hr />
<my:tagEx1Body />
<my:tagEx2body />
</my:tagEx1Body>
<hr />
<h1>태그 body tagdependent</h1>
<my:tagEx2body>
<p>Hello world</p>
${pageContext.request.contextPath}
<jsp:include page="includeEx3.jsp" />
<% Object o = new Object();
out.print(o);%>
<%= o %>
<%! int i =0; %>
</my:tagEx2body>
</body>
<jsp:doBody>태그는 해당 커스텀태그의 몸통태그에 선언된 내용을 실행시키거나 출력한다.
<%@ taglib prefix="my" tagdir="/WEB-INF/tags/chap16" %>
<body>
<h1>doBody 저장</h1>
<my:tagEx4body>
<p>Hello World 4</p>
</my:tagEx4body>
</body>
var 속성으로 변수를 선언하여 메모리에 담을 수 있으며, scope로 저장 영역을 설정한다.
주의해야 할 점은 Tag는 각자의 독립적인 페이지 영역을 가지므로, tag페이지에서의 변수는 JSP페이지에서 사용될 수 없다는 점이다.
JSP 페이지의 변수나 속성을 Tag 페이지에서 사용할 수 있는 이유는 같은 Request를 공유하기 때문이다.
<jsp:doBody var="body" scope="page" /> <!-- 커스텀태그 몸통부분을 실행시킴 -->
<h1>body출력 전</h1>
${body}
커스텀태그에 속성을 지정하기 위해서는 Tag 파일에 atrribute 디렉티브를 설정한다.
<%@attribute name="start" required="true" %>
<%@attribute name="end" required="true" %>
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<c:forEach begin="${start}" end="${end}" var="cur">
<li class="page-item"><a href="#" class="page-link">${cur}</a></li>
</c:forEach>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</nav>
-
required는 필수여부, name 속성명, type은 지정할 타입을 정한다. 주로 객체로 정보를 넘겨받을 경우 type을 쓴다.
해당 코드를 JSP 페이지에서 실행하게 되면, Tag에 정의된 속성과 값으로 pagenation이 만들어진다.
<my:pagenation start="3" end="10" />
JSP 페이지의 가독성은 물론, 재사용성과 모듈화를 챙기게 됨으로, 많이 사용하고 적용함이 알맞다고 생각이 든다.
'JSP & Servlet' 카테고리의 다른 글
Properties 파일을 이용한 FrontController 구현 (0) | 2020.07.24 |
---|---|
커스텀태그에서의 복잡한 Attribute 사용. (0) | 2020.07.20 |
태그파일을 이용한 커스텀태그 구현 (0) | 2020.07.20 |
ContextListener (0) | 2020.07.17 |
CharacterEncodingFilter (0) | 2020.07.17 |