Java使用JSP技巧可以使模板制作更容易?

Java使用JSP技巧可以使模板制作更容易?,第1张

Java使用JSP技巧可以使模板制作更容易?

正如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 FilesTiles
至少对我来说,有很多篡改之类的东西。我发现它们更易于使用,因为唯一的结构就是你提供的结构,没有任何先入为主的构想。另外,你可以将JSP标记文件用于其他用途(例如上面的用户详细信息片段)。

这是一个与我已经完成的DisplayTag相似的示例,但是所有这些都由Tag Files(和

Stripes
框架,即s:标签..)完成。这将产生一个行表,交替的颜色,页面导航等:

<t:table items="${actionBean.customerList}" var="obj" css_>  <t:col css_>    <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 scriptlet
代码,但这并没有你想象的那么多限制。如果我需要scriptlet的东西,我只是将逻辑放入标签中,然后将标签放入其中。

因此,标记文件几乎可以是任何你想要的文件。在最基本的级别上,它是简单的剪切和粘贴重构。抓取一部分布局,将其切出,进行一些简单的参数化,然后将其替换为标记调用。

在更高级别上,你可以做一些复杂的事情,例如我在这里使用的这个表格标签。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5108390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存