Seperti yang disarankan skaffman , File Tag JSP 2.0 adalah lutut lebah.
Mari kita ambil contoh sederhana Anda.
Masukkan yang berikut ini WEB-INF/tags/wrapper.tag
<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<html><body>
<jsp:doBody/>
</body></html>
Sekarang di example.jsp
halaman Anda :
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:wrapper>
<h1>Welcome</h1>
</t:wrapper>
Itu persis seperti yang Anda pikirkan.
Jadi, mari kita bahas hal yang sedikit lebih umum.
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>
Untuk menggunakan ini:
<%@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>
Apa yang membelikanmu? Banyak sekali, tapi itu menjadi lebih baik ...
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>
Untuk menggunakan ini: (anggap kita memiliki variabel pengguna dalam permintaan)
<%@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>
Tapi ternyata Anda suka menggunakan blok detail pengguna di tempat lain. Jadi, kita akan refactor saja.
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/>
Sekarang contoh sebelumnya menjadi:
<%@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>
Keindahan file Tag JSP adalah pada dasarnya Anda dapat menandai markup generik dan kemudian mengubahnya menjadi isi hati Anda.
JSP Tag Files
punya banyak hal yang direbut seperti Tiles
dll, setidaknya untuk saya. Saya menemukan mereka lebih mudah digunakan karena satu-satunya struktur adalah apa yang Anda berikan, tidak ada yang terbentuk sebelumnya. Plus Anda dapat menggunakan file tag JSP untuk hal lain (seperti fragmen detail pengguna di atas).
Berikut adalah contoh yang mirip dengan DisplayTag yang telah saya lakukan, tetapi ini semua dilakukan dengan Tag Files (dan Stripes
kerangka kerjanya , itulah s: tag ..). Ini menghasilkan tabel baris, warna bergantian, navigasi halaman, dll:
<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>
Tentu saja tag bekerja dengan JSTL tags
(seperti c:if
, dll.). Satu-satunya hal yang tidak dapat Anda lakukan dalam tubuh tag file tag adalah menambahkan kode Java scriptlet, tetapi ini tidak sebanyak keterbatasan yang Anda pikirkan. Jika saya membutuhkan hal-hal scriptlet, saya hanya memasukkan logika ke tag dan drop tag masuk Mudah.
Jadi, tag file bisa menjadi apa pun yang Anda inginkan. Pada tingkat paling dasar, ini sederhana dan paste refactoring. Ambil sepotong tata letak, hentikan, lakukan beberapa parameterisasi sederhana, dan ganti dengan permintaan tag.
Pada level yang lebih tinggi, Anda dapat melakukan hal-hal canggih seperti tag tabel yang saya miliki di sini.