ในฐานะที่เป็น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
ฯลฯ ) สิ่งเดียวที่คุณไม่สามารถทำได้ภายในเนื้อหาของแท็กไฟล์แท็กคือการเพิ่มโค้ดจาวาสคริปต์เล็ต แต่นี่ไม่ใช่ข้อ จำกัด อย่างที่คุณคิด หากฉันต้องการสิ่งสคริปต์เล็ตฉันก็ใส่ตรรกะลงในแท็กและวางแท็กในง่าย
ดังนั้นแท็กไฟล์อาจเป็นอะไรก็ได้ที่คุณต้องการ ในระดับพื้นฐานที่สุดมันง่ายในการตัดและวาง refactoring หยิบอันเลย์เอาต์มาตัดออกทำพารามิเตอร์ง่ายๆและแทนที่ด้วยการเรียกใช้แท็ก
ในระดับที่สูงขึ้นคุณสามารถทำสิ่งที่ซับซ้อนเช่นแท็กตารางที่ฉันมีที่นี่