As skaffman suggested, File tag JSP 2.0 sono le ginocchia delle api.
Facciamo il tuo semplice esempio.
Inserire il seguente in WEB-INF/tags/wrapper.tag
<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<html><body>
<jsp:doBody/>
</body></html>
Ora nella tua pagina example.jsp
:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:wrapper>
<h1>Welcome</h1>
</t:wrapper>
che fa esattamente quello che pensi lo fa.
Quindi, passiamo ad approfondire ciò a qualcosa di un po 'più generale. 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>
Per utilizzare questo:
<%@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>
Cosa che si acquista? Un sacco davvero, ma è ancora meglio ...
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>
Per utilizzare questa: (supponiamo di avere una variabile utente nella richiesta)
<%@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>
Ma ti fa girare il blocco dei dettagli dell'utente in altri luoghi. Quindi, lo rifatteremo. 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/>
Ora l'esempio precedente diventa:
<%@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>
La bellezza di file di tag JSP è che ti permette di fondamentalmente tag markup generico e quindi refactoring al contenuto del vostro cuore.
JSP Tag Files
hanno praticamente usurpato cose come ecc., Almeno per me. Li trovo molto più facili da usare in quanto l'unica struttura è ciò che gli dai, niente preconcetto. Inoltre è possibile utilizzare i file di tag JSP per altre cose (come il frammento di dettaglio dell'utente sopra).
Ecco un esempio simile a DisplayTag che ho fatto, ma questo è tutto fatto con Tag Files (e il framework Stripes
, ovvero s: tags ..). Ciò si traduce in una tabella di righe, colori alternati, pagina di navigazione, ecc:
<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>
Naturalmente i tag lavorano con il JSTL tags
(come c:if
, etc.). L'unica cosa che non puoi fare all'interno del corpo di un tag del tag è aggiungere il codice scriptlet Java, ma non è una limitazione come potresti pensare. Se ho bisogno di materiale scriptlet, inserisco la logica in un tag e rilasciamo il tag. Facile.
Quindi, i file di tag possono essere praticamente ciò che volete che siano. Al livello più elementare, è semplice refactoring di taglia e incolla. Prendi una porzione di layout, tagliala, esegui una semplice parametrizzazione e sostituiscila con una chiamata di tag.
Ad un livello superiore, puoi fare cose sofisticate come questo tag tabella che ho qui.
Grazie per questo.È il miglior tutorial che ho potuto trovare sui file di tag JSP, che per me sono stati eccezionali grazie a JSF. Vorrei poter dare più di un voto. – digitaljoel
+ 40 milioni. Grazie per averlo spiegato 50.000 volte meglio di qualsiasi tutorial schifoso che ho trovato. Venendo dal mondo Rails e ERB mancante, questo è esattamente ciò di cui ho bisogno. Dovresti scrivere un blog. – cbmeeks
Davvero un bel tutorial. Potresti condividere con noi il codice per il tag del tavolo che hai creato? Ne ho creato uno anch'io qualche tempo fa ma il tuo approccio è migliore. –