Grails:重用预定义列表

时间:2009-09-12 00:13:12

标签: grails

我是Grails的新手,目前正在使用Grails 1.1.1。我不知道如何将控件/操作中的列表传递给视图,然后将该视图中的相同列表传递给另一个操作。我这样做的原因是重用预定义的对象(在这种情况下为“列表”)。这是我的情景:

我有一个搜索视图(search.gsp)调用“搜索”操作,该操作查询数据库,将结果存储在列表中(使用Hibernate Criteria),并在结果视图上呈现该列表(results.gsp )。在result.gsp上,我有导出栏(使用grails导出插件)将该列表导出到EXCEL文件。我将该列表传递给结果视图时遇到问题,以便我可以将其传递给“导出”操作。

如果有人可以就此给出建议,我真的很感激。感谢。

2 个答案:

答案 0 :(得分:3)

由于您希望将此对象传递给多个请求,因此您必须将其存储在user session中,如下所示:

def search = {
        session["results"] = queryDatabase(params)
}

def export = {
        def results = session["results"]
}

答案 1 :(得分:0)

正如Michael指出的那样,您的场景涉及不同的HTTP请求,因此您不能将结果“传递”到第二个操作,就像将模型从控制器操作传递到视图一样。虽然迈克尔的建议(将结果存储在用户会话中)肯定会有效,但另一种选择(和更常见的恕我直言)方法是将相同的请求参数(例如您的搜索查询)传递给导出操作,然后重新获取导出操作中来自DB的数据。

这种无状态方法有一些优点:

  1. 它更具可扩展性,因为您不必担心会话“污染”或在分布式环境中复制会话
  2. 如果用户发出多个并发搜索请求(例如,在不同的浏览器选项卡中),则不会遇到问题。这是会话方法的一个严重问题。