Jak skaffman suggested, JSP 2.0 Tag Files są za kolana pszczoły.
Weźmy Twój prosty przykład.
umieścić następujące w WEB-INF/tags/wrapper.tag
<%@tag description="Simple Wrapper Tag" pageEncoding="UTF-8"%>
<html><body>
<jsp:doBody/>
</body></html>
Teraz na stronie example.jsp
:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:wrapper>
<h1>Welcome</h1>
</t:wrapper>
To robi dokładnie to, co myślisz, że to robi.
Rozwińmy więc to na coś bardziej ogólnego. 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>
Aby użyć tego:
<%@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>
Co to kupić ci? Wiele naprawdę, ale to staje się jeszcze lepszy ...
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>
Aby tego używać: (zakładamy, że mamy zmienną użytkownika w żądaniu)
<%@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>
Ale to sprawia, że lubisz używać tego bloku szczegółów użytkownika w innych miejscach. Tak więc, będziemy go refaktoryzować. 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/>
Teraz poprzedni przykład postać:
<%@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>
Piękno plików Tag JSP jest to, że pozwala w zasadzie oznakować rodzajowy znaczników i wtedy byłaby to do syta.
JSP Tag Files
w dużym stopniu uzurpowałeś sobie takie rzeczy jak itd., Przynajmniej dla mnie. Uważam, że są znacznie łatwiejsze w użyciu, ponieważ jedyną strukturą jest to, co dajesz, nic z góry nie z góry. Dodatkowo możesz użyć plików znaczników JSP do innych rzeczy (takich jak fragment szczegółów użytkownika powyżej).
Oto przykład, który jest podobny do DisplayTag, który zrobiłem, ale to wszystko jest zrobione z plikami znaczników (i ze strukturą Stripes
, to s: tagi ..). Wynika to w tabeli wierszy, na przemian kolorami, strona nawigacji, etc:
<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>
oczywiście tagi współpracować z JSTL tags
(jak c:if
, itd.). Jedyne, czego nie możesz zrobić w treści znacznika pliku, to dodać kod skryptu Java, ale to nie jest tak duże ograniczenie, jak mogłoby się wydawać. Jeśli potrzebuję skryptletów, po prostu umieszczam logikę w tagu i upuszczam tag. Łatwo.
Tak więc pliki znaczników mogą być dowolne. Na najbardziej podstawowym poziomie jest to proste refaktoryzowanie. Chwyć fragment układu, wytnij go, przeprowadź prostą parametryzację i zastąp go za pomocą wywołania znacznika.
Na wyższym poziomie możesz wykonywać zaawansowane funkcje, takie jak ten tag tabeli, który mam tutaj.
Dzięki za to.To najlepszy samouczek, jaki udało mi się znaleźć w plikach znaczników JSP, które były świetne dla mnie z JSF. Chciałbym dać więcej niż jeden głos. – digitaljoel
+ 40 milionów. Dziękuję za wyjaśnienie tego 50 000 razy lepiej niż jakikolwiek paskudny tutorial, który znalazłem. Pochodzę ze świata Railsów i brakuje ERB, to jest dokładnie to, czego potrzebuję. Powinieneś napisać blog. – cbmeeks
Naprawdę ładny tutorial. Czy możesz podzielić się z nami kodem tagu tabeli, który zrobiłeś? Stworzyłem go jakiś czas temu, ale twoje podejście jest lepsze. –