如何在Struts 2中实现分页

时间:2013-02-14 11:38:36

标签: java jsp struts2 struts2-jquery jquery-pagination

如何在Struts 2中为客户端显示和Hibernate实现分页作为持久层。

以下是我到目前为止所做的代码:

<display:table id="students" name="students" pagesize="2"
    export="false" requestURI="/student">
    <display:column property="studentRoll" title="Roll"
        paramId="studentRoll" sortable="true" />
    <display:column property="studentName" title="Name" sortable="true" />
    <display:column property="studentCourse" title="Course"
        sortable="true" />
    <display:setProperty name="paging.banner.placement" value="bottom" />
</display:table>

有没有办法在没有display代码的情况下实现这个?

3 个答案:

答案 0 :(得分:4)

有一种方法可以实现它,我会给你一些建议。可能不是你正在寻找但是显示标签我真的怀疑你可以实现一些不关心这个词的东西。 display标签是一个库,用于简化Web上表格数据的表示,并且已经足够老了,可以将它与Ajax等基于组件的脚本库(如jQuery等)等现代技术一起使用。甚至我看到显示标签被ajaxified但我看到这只不过是增加了有问题的架构的复杂性。需要在这里添加它基于属性的显示标记库的性质。它的创建目的是为了简化使用或开发过程。如今人们不会局限于定制和丑陋的解决方案。

现在查看代码,如果我可以说这是一个代码,标签代表具有行和列的表,可以使用标签,标题,其他HTML属性自定义它们,即使使用CSS但是这不是这个题。

属性名称表示具有表示表格数据的数据结构的变量。它可以是列表列表,也可以是一组对象无关紧要。它有什么问题可以迭代并且有行和列。

属性pagesize指向每页的记录数。

给定的URI甚至不记得从服务器提供数据是什么,或者只是为了逃避。

靠近标签的末尾是横幅放置,使用属性设置。因此,您甚至不必使用它来设置任何代码,只需设置自定义属性。

现在,为了在Struts2中用数据表示表,有一个

<s:iterator var="row" begin="0" value="#request.navigator.list">

标记,列表为students或其他无关紧要的内容。导航器是与显示标签中的横幅类似的对象,但不是此处的组件。我将在稍后描述按钮的组件导航器。

在迭代器中,您可以拥有代表该行的任何内容。但这是不可能的。

作为组件的导航器可以通过不同的方式给出,例如

<s:property value="#request.navigator.bar" escapeHtml="false"/>  

然后通过SQL或HQL从数据库中获取列表中的数据,或者Criteria API无关紧要。这分两步完成。首先检查希望返回的记录总数。它提供了在最后移动而不超过页面大小的可能性。然后返回在页面上表示所需的有限行数。这些都在显示表格的操作中完成。要工作的动作需要第一行和pagesize两个参数。如果记录总数发生变化,还需要更正导航器。

这就是我想要回答的关于如何实现页面导航逻辑的内容。我试图不写很多很多代码而不是问题。

答案 1 :(得分:1)

你需要或多或少地复制显示器的方式。

  1. 您需要构建一个页面选择器,为此您需要获取 项目总数 - 请参阅 Criteria.setProjection(Projections.rowCount)。
  2. 你需要提供 页面上允许用户将所选页面发送到操作的链接。
  3. 在您的操作中,您可以使用该页面 选择的数字和确定偏移量的页面大小 结果数量,请参阅Critera.setFirstResult和 Criteria.setMaxResults
  4. 然后,您将阅读这些行并创建 行豆的集合。
  5. 在JSP中迭代bean并使用&lt; s:iterator \&gt;构建表。
  6. 看起来使用displaytag可能会更容易,看看它的PaginatedList接口可以让你在Hibernate中进行分页并让displaytag完成所有的工作。

答案 2 :(得分:0)

我建议您使用jQuery Datatable,您需要完成以下操作:

<table id="datatable">
  <tbody>
    <s:iterator>
        <tr><td><s:property/></td></tr>
    </s:iterator>
  </tbody>
</table>
<script>
    $("#datatable").dataTable();
</script>

还有其他选项,例如struts2-jquery-plugin

这取决于您的需求。

相关问题