显示标签提供了给定对象的分页功能。Hibernates提供了只获取每个page.In所需记录的选项,我的项目我们正在使用这两个概念。
显示标签:我需要根据过滤条件获取所有记录,并将其存储在会话中。然后这个displaytag将负责所有的分页,并且sorting.So Httpsession保存了大量数据。
Hibernate:对于每个请求,它只从database.Need获取所请求的数目个对象,以打开会话。
最好的方法是什么?或者如果我们能做到这两件事,该怎么做?请在这方面提供帮助。
发布于 2010-06-30 05:07:14
正如您所概述的,使用DisplayTag时,您需要获取所有的结果并将它们放入会话中。因此,您只执行了一个(可能很昂贵的)查询,但是从内存的角度来看,这不能很好地扩展(如果您需要获取大量结果,或者如果您增加了并发用户数)。
另一方面,使用Hibernate,您可以使用setFirstResult和setMaxResult来获取每个页面上实际显示的记录。这需要对每个页面执行一次查询,但将扩展到无限数量的结果。
就我个人而言,我更喜欢第二种方法,我发现这种方法内存效率更高-特别是因为大多数用户并不浏览所有页面(所以为什么要加载所有结果)-并使用Pagination in Hibernate and EJB3中描述的模式。
如果您决定坚持第一种方法,我将实现某种最大结果数限制,以避免过于昂贵的查询。如果查询超出了限制,要求用户执行更严格的搜索,即添加条件(不管怎样,谁来浏览几千个结果呢?)
如果您需要所有结果,例如用于报告目的,那么在我看来,DisplayTag和statefull会话都不是合适的工具。
发布于 2011-04-14 22:32:34
实际上你不需要获取所有的结果,你可以使用一个叫做外部分页的Displaytag特性,在这里你告诉Displaytag你正在Displaytag外部处理分页。
有关详细信息,请参阅Displaytag文档中的External Paging and Sorting。
此外,this stackoverflow question还有更多信息和示例代码。
https://stackoverflow.com/questions/3143408
复制相似问题