JSP & Servlet

커스텀태그에서의 복잡한 Attribute 사용.

Jungsoomin :) 2020. 7. 20. 12:22

커스텀 태그에 단순한 Attribute를 지정할 때에는 <%@attribute 선언 후 name 과 value , type 값을 주면서 사용했으나,

 

복잡한 계산이나, html태그나 문장이 들어갈 경우, 가독성이 떨어지거나, 사용하기 어려울 수 있을 때에 사용하는 것이

<%@attribute 의 fragment 속성이다. 기본 값은 false이므로 true 값으로 바꾸어 사용여부를 정한다.

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

JSP 페이지에서는 커스텀 태그의 자식태그로 <jsp:attribute> 태그를 사용으로서 커스텀 태그의 속성 값을 정의한다.

   name 속성에는 속성명을, <jsp:attribute> 태그의 몸통에는 속성 값을 정의한다.

 <%@ taglib prefix="my" tagdir="/WEB-INF/tags/chap16" %>
 ,,,
 
 <my:tagExtFragment >
		<jsp:attribute name="attr">
			<p>Hello World</p>
			<%-- <%!
			int i =0;  스크립트요소 사용불가
			%> --%>
		</jsp:attribute>
		<jsp:attribute name="attr2">
			<p>Hello Fragment - jsp:invoke</p>
		</jsp:attribute>
	</my:tagExtFragment>

Tag 파일에서 속성 값을 받아올때는 <jsp:invoke>를 사용하며, fragment속성의 값으로 속성명을 주어 값을 받아오게된다.

 

var 나 scope 속성으로 변수에 담거나 담을 영역을 선택하여 필요할때 Tag파일에서 출력할 수 있게 구성되어있다.

<!-- 값을 받아올때는 jsp:invoke를 사용한다. fragment 속성에 attribute 이름을 넣는다. -->
<jsp:invoke fragment="attr" />

<hr />

<!-- var변수와 scope 영역에 저장해둘 수도 있다. -->
<jsp:invoke fragment="attr2" var="myAttr2" scope="page" />
<h1>attribute 저장 후</h1>
${myAttr2}