으로 skaffman 제안 , JSP 2.0 태그 파일은 꿀벌의 무릎이다.
간단한 예를 들어 보자.
다음을 넣어 WEB-INF/tags/wrapper.tag
<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<html><body>
<jsp:doBody/>
</body></html>
이제 귀하의 example.jsp
페이지에서 :
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:wrapper>
<h1>Welcome</h1>
</t:wrapper>
그것은 당신이 생각하는 것과 정확히 일치합니다.
그래서 좀 더 일반적인 것으로 확장 해 봅시다.
WEB-INF/tags/genericpage.tag
<%@tag description="Overall Page template" pageEncoding="UTF-8"%>
<%@attribute name="header" fragment="true" %>
<%@attribute name="footer" fragment="true" %>
<html>
<body>
<div id="pageheader">
<jsp:invoke fragment="header"/>
</div>
<div id="body">
<jsp:doBody/>
</div>
<div id="pagefooter">
<jsp:invoke fragment="footer"/>
</div>
</body>
</html>
이것을 사용하려면 :
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:genericpage>
<jsp:attribute name="header">
<h1>Welcome</h1>
</jsp:attribute>
<jsp:attribute name="footer">
<p id="copyright">Copyright 1927, Future Bits When There Be Bits Inc.</p>
</jsp:attribute>
<jsp:body>
<p>Hi I'm the heart of the message</p>
</jsp:body>
</t:genericpage>
그게 당신을 사나요? 정말 많이 있지만 더 좋아집니다 ...
WEB-INF/tags/userpage.tag
<%@tag description="User Page template" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<%@attribute name="userName" required="true"%>
<t:genericpage>
<jsp:attribute name="header">
<h1>Welcome ${userName}</h1>
</jsp:attribute>
<jsp:attribute name="footer">
<p id="copyright">Copyright 1927, Future Bits When There Be Bits Inc.</p>
</jsp:attribute>
<jsp:body>
<jsp:doBody/>
</jsp:body>
</t:genericpage>
이것을 사용하려면 : (요청에 사용자 변수가 있다고 가정)
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:userpage userName="${user.fullName}">
<p>
First Name: ${user.firstName} <br/>
Last Name: ${user.lastName} <br/>
Phone: ${user.phone}<br/>
</p>
</t:userpage>
그러나 다른 곳에서 해당 사용자 세부 정보 블록을 사용하고 싶습니다. 그래서 우리는 그것을 리팩토링 할 것입니다.
WEB-INF/tags/userdetail.tag
<%@tag description="User Page template" pageEncoding="UTF-8"%>
<%@tag import="com.example.User" %>
<%@attribute name="user" required="true" type="com.example.User"%>
First Name: ${user.firstName} <br/>
Last Name: ${user.lastName} <br/>
Phone: ${user.phone}<br/>
이제 이전 예는 다음과 같습니다.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:userpage userName="${user.fullName}">
<p>
<t:userdetail user="${user}"/>
</p>
</t:userpage>
JSP 태그 파일의 장점은 기본적으로 일반 마크 업에 태그를 지정하고이를 마음의 내용으로 리팩토링 할 수 있다는 것입니다.
JSP Tag Files
Tiles
적어도 나를 위해 등을 많이 빼앗 았 습니다. 유일한 구조는 당신이주는 것이므로 선입견이 없으므로 사용하기가 훨씬 쉽다는 것을 알았습니다. 또한 JSP 태그 파일을 다른 용도로 사용할 수 있습니다 (위의 사용자 세부 사항 조각과 같은).
다음은 내가 수행 한 DisplayTag와 유사한 예이지만, 모두 Tag Files (및 Stripes
프레임 워크, s : tags ..)를 사용하여 수행됩니다. 결과적으로 행 테이블, 색상 변경, 페이지 탐색 등이 발생합니다.
<t:table items="${actionBean.customerList}" var="obj" css_class="display">
<t:col css_class="checkboxcol">
<s:checkbox name="customerIds" value="${obj.customerId}"
onclick="handleCheckboxRangeSelection(this, event);"/>
</t:col>
<t:col name="customerId" title="ID"/>
<t:col name="firstName" title="First Name"/>
<t:col name="lastName" title="Last Name"/>
<t:col>
<s:link href="/Customer.action" event="preEdit">
Edit
<s:param name="customer.customerId" value="${obj.customerId}"/>
<s:param name="page" value="${actionBean.page}"/>
</s:link>
</t:col>
</t:table>
물론 태그는 JSTL tags
(와 같은) 와 함께 작동합니다 c:if
. 태그 파일 태그의 본문 내에서 할 수없는 것은 Java 스크립틀릿 코드 추가 뿐이지 만 생각만큼 제한이 없습니다. 스크립틀릿이 필요한 경우 로직을 태그에 넣고 태그를 넣습니다.
따라서 태그 파일은 원하는대로 만들 수 있습니다. 가장 기본적인 수준에서는 간단한 잘라 내기 및 붙여 넣기 리팩토링입니다. 레이아웃 청크를 잡고 잘라내어 간단한 매개 변수화를 수행 한 후 태그 호출로 대체하십시오.
더 높은 수준에서는 여기에있는이 테이블 태그와 같은 정교한 작업을 수행 할 수 있습니다.