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.
Saya membuatnya cukup mudah, perpustakaan tag warisan JSP style Django style. https://github.com/kwon37xi/jsp-template-inheritance
Saya pikir itu mudah untuk mengelola tata letak tanpa kurva belajar.
contoh kode:
base.jsp: tata letak
view.jsp: konten
sumber
Berdasarkan ide dasar yang sama dengan jawaban @Will Hartung , berikut ini adalah mesin templat extensible one-tag ajaib saya. Bahkan termasuk dokumentasi dan contoh :-)
WEB-INF / tag / block.tag:
sumber
Gunakan ubin . Itu menyelamatkan hidupku.
Tetapi jika Anda tidak bisa, ada tag include , yang membuatnya mirip dengan php.
Tag tubuh mungkin tidak benar-benar melakukan apa yang Anda inginkan, kecuali jika Anda memiliki konten yang sangat sederhana. Tag tubuh digunakan untuk mendefinisikan tubuh elemen yang ditentukan. Lihatlah contoh ini :
Anda menentukan nama elemen, atribut apa pun yang mungkin dimiliki elemen ("lang" dalam kasus ini), dan kemudian teks yang masuk di dalamnya - tubuh. Jadi jika
content.headerName = h1
,content.lang = fr
, dancontent.body = Heading in French
Maka hasilnya akan menjadi
sumber
Ini juga dapat dicapai dengan jsp: include. Chad Darby menjelaskan dengan baik di sini di video ini https://www.youtube.com/watch?v=EWbYj0qoNHo
sumber
tambahkan dependecys untuk digunakan <% @ tag description = "Templat Halaman Pengguna" pageEncoding = "UTF-8"%>
sumber
Saya tahu jawaban ini datang bertahun-tahun setelah fakta dan sudah ada jawaban JSP yang bagus oleh Will Hartung, tetapi ada Facelet, mereka bahkan disebutkan dalam jawaban dari pertanyaan terkait di pertanyaan awal.
Keterangan tag Facelets SO
Sayangnya deskripsi tutorial sederhana terbaik yang saya temukan adalah di Wikipedia dan bukan situs tutorial. Bahkan bagian yang menggambarkan templat bahkan melakukan apa yang diminta pertanyaan asli.
Karena fakta bahwa Java-EE 6 telah usang JSP saya akan merekomendasikan pergi dengan Facelet meskipun fakta bahwa mungkin ada lebih banyak diperlukan untuk sedikit atau tidak ada keuntungan atas JSP.
sumber