通常,用户进行搜索,获取命中列表,然后可以浏览它.hitlist是一个中间结果,在整个浏览过程中保持一致,通常存储在会话状态中.例如,如果新项目由其他项目同时添加,则它们仅出现在后续搜索中.
在REST应用程序中,我不能轻易获得这个中间结果 - 它既不属于客户端,也不属于模型.我在REST网络应用程序中阅读了分页,但我的答案并不完全清楚.那里的解决方案似乎假设在用户浏览结果时不更新模型.
我们当然可以将世界(模型)想象成一系列不可变的快照.通过提供一个时间戳(或全球版本号),我们就得到了模型的一致视图在那个时候,这从概念的角度来看解决了这个问题.但它确实意味着模型的完整版本.(我也想知道是否有与函数式编程相关的连接)
我该如何处理这个问题?
注意:我问,因为我打算使用play框架,它根本没有HTTP状态或会话的概念; 这是纯粹的宁静.
在第一次搜索得到查询结果后,您可以将结果保存在缓存中.对于一个服务器,它可以是群集环境的ehcache(在播放中支持)或memcached(也由播放支持).您可以使用静态名称+会话ID保存结果.因此,您只需要每个请求的会话ID,它将保存在客户端cookie中,并在您的播放应用中提供.您可以使用缓存数据来浏览页面.我也推荐ElasticSearch.
编辑:更好的方法是你可以使用play-search http://github.com/jfp/play-search,示例:
Query q = Search.search("object:dogs", Folder.class); q.orderBy("object") .page(2,5) .reverse();
PS:你对Play的决定是完美的.我是一名专业的.net开发人员,我可以说世界上唯一可以与asp.net mvc 2竞争的(最佳)Web框架是Play框架.Grails是buggy,Django/Python,Yii/Php,Rails都很慢,不是类型安全而且远离jvm/clr框架.wicket,挂毯,struts,jsf,spring mvc都是冗长无用的.spring roo只是一个模板生成器.Asp.net mvc超越了asp.net并成为.net的第一开发平台,但是sun为一个旧的asp.net克隆用jsf为下一代,大错.在我看来,java的唯一希望就是玩框架.使用scala模块,它是完美的......