【问题标题】:2 instances of the same table inside jspjsp内同一张表的2个实例
【发布时间】:2010-09-19 19:14:19
【问题描述】:

目前一个jsp文件有2个页面:其中一个显示数据,第二个用于分页。任务是在数据表上方包含完全相同的分页器表。不好意思,忍不住画了:)

|-----------------------------------------|
|                      Page 2 of 200  < > |
|-----------------------------------------|
|-----------------------------------------|
|   Some weird business data comes here   |
|-----------------------------------------|
|-----------------------------------------|
|                      Page 2 of 200  < > |
|-----------------------------------------|

问题是:如果没有无耻的复制粘贴,我该怎么做?

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    当今 JSP 中的四种抽象机制是 jsp:include 标记、 指令、自定义标记库和自定义标记文件。

    jsp:include 插入执行另一个 JSP 页面的结果,所以你可以这样做:

    <jsp:include "page_naviagtor.jsp"/>
    <table id="results">...</table>
    <jsp:include "page_navigator.jsp"/>
    

    类似于 jsp:include,只是它并不实际执行代码,而是简单地将其标记到原始 JSP 源中,并与页面的其余部分一起编译。

    自定义标签库为您(几乎)提供了 JSP 标签的全部功能,因此您可以执行以下操作:

    <tag:wrap_in_page_nav>
        <table id="results"> ... </table>
    </tag:wrap_in_page_nav>
    

    但是,这些要求您编写自定义 Java 代码。

    最后,坦率地说,对于大多数情况来说,最好的选择是 JSP 2.0 Tag FIle。

    标签文件是 jsp:include 和自定义标签之间的交叉。它们让您执行类似于“wrap_in_page_nav”标签的操作,但您实际上使用 JSP 标记创建标签。

    因此,在许多情况下,您可以简单地剪下要重构的部分,并将其粘贴到标签文件中,然后简单地使用标签。

    page.tag

    <%@tag description="put the tag description here" pageEncoding="UTF-8"%>
    <%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>    
    <%@attribute name="startPage" required="true"%>
    <%@attribute name="endPage" required="true"%>    
    <html>
        <head>
            <title>Page Title</title>
        </head>
        <body>
            <tag:page_nav startPage="${startPage}" endPage="${endPage}"/>
            <jsp:doBody/>
            <tag:page_nav startPage="${startPage}" endPage="${endPage}"/>
        </body>
    </html>
    

    page_nav.tag

    <%@tag description="put the tag description here" pageEncoding="UTF-8"%>
    <%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>    
    <%@attribute name="startPage" required="true"%>
    <%@attribute name="endPage" required="true"%>    
    <div>${startPage} .. ${endPage}</div>
    

    最后,你的 JSP

    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
    <%@ taglib prefix="t" tagdir="/WEB-INF/yourtags" %>
    <tag:page startPage="1" endPage="4">
        <table> ... </table>
    </tag:page>
    

    每个标签文件都拥有JSP的全部威力,唯一的限制是在使用你自己的自定义标签文件时,你的自定义标签文件标签之间不能包含scriptlet代码(你可以用普通的JSP标签,刚才标记文件标记)。

    标记文件是一个非常强大的抽象工具,可在 JSP 中使用。

    【讨论】:

    • 我已经摆脱了
    【解决方案2】:

    也许您可以在单独的 jsp 中定义分页内容,然后将其两次包含到您的主 jsp 中。例如:

    <jsp:include page="pagination.jsp" flush="true" />
    
    <table>...business data...</table>
    
    <jsp:include page="pagination.jsp" flush="true" />
    

    这样,如果您想更改分页内容,只需编辑 pagination.jsp。

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2021-03-02
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多