代码之家  ›  专栏  ›  技术社区  ›  yanchenko

JSP中相同表的2个实例

  •  1
  • yanchenko  · 技术社区  · 16 年前

    当前JSP文件中有两个页面:一个页面显示数据,另一个页面用于分页。任务是在数据表上方包含完全相同的分页器表。对不起,忍不住画了:)

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

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Will Hartung    16 年前

    今天在JSP中抽象的四种机制是JSP:include标记、<%@include>指令、自定义标记库和自定义标记文件。

    jsp:include插入执行另一个jsp页面的结果,因此可以执行以下操作:

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

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

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

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

    但是,这需要您编写自定义的Java代码。

    最后,坦率地说,对于大多数情况,最好的选择是JSP 2.0标记文件。

    标记文件是jsp:include和自定义标记之间的交叉点。它们允许您执行类似于“wrap-in-page-nav”标记的操作,但实际上您使用JSP标记创建了标记。

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

    页面标签

    <%@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>
    

    标签标签

    <%@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
  •  3
  •   pkaeding    16 年前

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

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

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