5

如何在 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标签的情况下实现这个?

4

3 回答 3

4

有一种方法可以实现它,我会给你一些建议。可能不是您正在寻找,而是使用显示标签,我真的怀疑您是否可以实现一些不想说那个词的东西。显示标签是一个库,用于简化 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 从数据库中获取无关紧要。这分两步完成。首先检查希望返回的记录总数。它提供了在最后移动并且不超过页面大小的可能性。然后返回在页面上表示所需的有限行数。这些都在显示表格的操作中完成。该操作需要两个参数,第一行和页面大小。如果记录总数发生变化,这也需要更正导航器。

这就是我想回答的关于如何实现页面导航逻辑的问题。我尽量不要写很多很多代码,因为它毫无疑问。

于 2013-02-14T14:23:40.607 回答
1

您将需要或多或少地复制 display 执行此操作的方式。

  1. 您需要构建一个页面选择器,为此您需要获取项目的总数 - 请参阅 Criteria.setProjection(Projections.rowCount)。
  2. 您需要在页面上提供链接,以允许用户将所选页面发送到操作。
  3. 然后,在您的操作中,您可以使用所选页码和页面大小来确定偏移量和结果数,请参阅 Critera.setFirstResult 和 Criteria.setMaxResults
  4. 然后,您将读取这些行并创建行 bean 的集合。
  5. 在您的 JSP 中迭代 bean 并使用 <s:iterator\> 构建您的表。

似乎使用 displaytag 可能更容易,请参阅它的 PaginatedList 接口,它允许您在 Hibernate 中进行分页并让 displaytag 完成所有艰苦的工作。

于 2013-02-14T11:52:57.823 回答
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

这取决于您的需求。

于 2013-02-14T11:46:36.330 回答