2013-02-14 101 views
4

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

这里是我迄今所做的代码:

<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标签?

+0

更好地描述结果你是怎么做的。 – 2013-02-14 11:42:32

回答

3

有一种实现方法,我会给你一些建议。也许这不是你正在寻找,但与显示标签,我真的怀疑你可以实现一些不关心说这个字。显示标记是一个库,用于简化网络上表格数据的表示,并且已经足够老化,可以像Ajax和基于组件的脚本库(如jQuery等)一样使用现代技术。即使我已经看到显示标记已被渲染,但我看到这只不过是增加了有问题的架构的复杂性。这里需要添加它属于基于属性的显示标签库的性质。它的创建目的是为了简化当时的使用或开发过程。现在人们不会将自己局限于习俗和丑陋的解决方案。

现在看代码,如果我可以说这是一个代码,该标签表示行和列的表,给定可能使用标签,标题,其他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或条件API不要紧数据库中提取。这是分两步完成的。首先检查希望返回的记录总数。它提供了在最后移动并且不超过页面大小的可能性。然后返回需要在页面上表示的有限行数。这些都是在显示表格的操作中完成的。工作行为需要两个参数,第一行和页面大小。如果更改了记录总数,则还需要更正导航器。

这就是我想回答如何实现页面导航逻辑。我试图不写许多许多代码,因为它没有问题。

+0

好的,谢谢你的详细解释。但我不能申请CSS来显示tag.can你请指定任何解决方案来做到这一点。 – edaklij 2013-02-15 06:00:42

+0

这可能是另一个答案,现在你可以看看[this](http://stackoverflow.com/questions/14464701/how-can-i-adjust-the-position-of-last-prev-next-最后链接功能于struts2-0-DISP/14466668#14466668)。 – 2013-02-15 09:00:50

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

其他选项这取决于你的需求。

1

您将需要或多或少复制显示方式。

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

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

+0

好的,谢谢你的replay.but我不能申请CSS显示tag.can你请指定任何解决方案来做到这一点。 – edaklij 2013-02-15 05:55:33