以下のよう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に似た例ですが、これはすべてタグファイル(およびStripes
フレームワーク、つまりs:タグ..)で行われます。これにより、行のテーブル、交互の色、ページナビゲーションなどが生成されます。
<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スクリプトレットコードを追加することですが、これは思ったほどの制限ではありません。スクリプトレットのものが必要な場合は、ロジックをタグに挿入して、タグをドロップします。簡単です。
したがって、タグファイルは、ほとんどの場合、希望どおりのものにすることができます。最も基本的なレベルでは、単純なカットアンドペーストのリファクタリングです。レイアウトのチャンクを取得し、それを切り取り、いくつかの単純なパラメーター化を行い、タグの呼び出しに置き換えます。
より高いレベルでは、私がここに持っているこのテーブルタグのような洗練されたことができます。