JSP & Servlet

커스텀태그의 몸통 내용 처리방식

Jungsoomin :) 2020. 7. 20. 11:47

tag 파일의 커스텀 태그의 tag 디렉티브의 속성 중 body-content 라는 속성이 존재하는데, 이 속성의 설정으로 몸통태그에 대한 출력과 실행을 관리할 수 있다.

<%@ tag body-content="scriptless" %>

기본 값은 scriptless 이며 empty , tagdependent 로 나뉜다.

 

  1. scriptless는 JSP의 스크립트요소를 제외한 태그들의 실행을 허용한다. JSP스크립트요소가 몸통태그에 있을시 예외가 발생한다.

  2. 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>
  1. required는 필수여부, name 속성명, type은 지정할 타입을 정한다. 주로 객체로 정보를 넘겨받을 경우 type을 쓴다.


해당 코드를 JSP 페이지에서 실행하게 되면, Tag에 정의된 속성과 값으로 pagenation이 만들어진다.

<my:pagenation start="3" end="10" />

 

JSP 페이지의 가독성은 물론, 재사용성과 모듈화를 챙기게 됨으로, 많이 사용하고 적용함이 알맞다고 생각이 든다.