Java REST web应用中的分页

Java REST web应用中的分页,java,rest,pagination,playframework,Java,Rest,Pagination,Playframework,通常,用户进行搜索,获得一个命中列表,然后可以浏览它。hitlist是一个中间结果,在整个浏览过程中保持一致,通常以会话状态存储。例如,如果其他人同时添加新项目,则这些项目将仅出现在后续搜索中 在REST应用程序中,我不能轻易得到这个中间结果——它既不属于客户机,也不属于模型。我读过,但不完全清楚答案。那里的解决方案似乎假设在用户浏览结果时模型不会更新 我们当然可以把世界(模型)想象成一系列不变的快照。通过提供时间戳(或全局版本号),我们可以获得当时模型的一致视图,这从概念角度解决了问题。然而,

通常,用户进行搜索,获得一个命中列表,然后可以浏览它。hitlist是一个中间结果,在整个浏览过程中保持一致,通常以会话状态存储。例如,如果其他人同时添加新项目,则这些项目将仅出现在后续搜索中

在REST应用程序中,我不能轻易得到这个中间结果——它既不属于客户机,也不属于模型。我读过,但不完全清楚答案。那里的解决方案似乎假设在用户浏览结果时模型不会更新

我们当然可以把世界(模型)想象成一系列不变的快照。通过提供时间戳(或全局版本号),我们可以获得当时模型的一致视图,这从概念角度解决了问题。然而,它确实意味着模型的完整版本控制。(我还想知道函数式编程是否有联系)

我应该如何处理这个问题


注意:我这样问是因为我计划使用,它根本没有HTTP状态或会话的概念;这是纯粹的宁静

我有点不知道您的上下文是什么,但如果我必须提供一个简短的答案,那就是搜索结果应该是模型的一部分。我想你有一个可搜索的模型。您要做的是为搜索和存储索引信息所需的部件编制索引(使其成为模型的一部分)。执行搜索时,查询索引并显示结果。第二次执行搜索不会包含新添加的项,除非重新生成索引


这样就不需要使用任何会话状态并保持其restful状态,因为索引只是对资源执行的另一个操作。这就是您需要的吗?

在第一次搜索得到查询结果后,您可以将结果保存在缓存中。对于一台服务器,它可以是ehcache(在play中受支持)或memcached(在play中也受支持),用于集群环境。您可以通过静态名称+会话id保存结果。因此,您只需要每个请求的会话id,它会保存在客户端cookie中,并在您的play应用程序中可用。 您可以使用缓存数据浏览页面。我也推荐ElasticSearch

编辑:更好的方法是使用播放搜索,示例:


附言:你对游戏的决定是完美的。我是一名专业的.net开发人员,我可以说世界上唯一能与asp.net MVC2匹敌的(最佳)web框架是Play framework。Grails是有缺陷的,Django/Python、Yii/Php、Rails都很慢,类型不安全,而且远离jvm/clr框架。wicket、tapestry、struts、jsf、SpringMVC都是冗长而无用的。SpringRoo只是一个模板生成器。Asp.net mvc超越了Asp.net,成为了.net的第一个开发平台,但sun为下一代的带有jsf的旧Asp.net克隆工作,这是一个大错误。在我看来,java的唯一希望是play框架。使用scala模块,它是完美的…

域模型由持久实体组成。你建议我也保留搜索结果本身吗?然后我会研究一下缓存特性。但是搜索结果可以随时从缓存中退出,这与用户会话是否超时无关。。。播放搜索看起来很有趣,谢谢!有关“缓存即用”框架的文档:
    Query q = Search.search("object:dogs", Folder.class);
q.orderBy("object")
    .page(2,5)
    .reverse();