Groovy Grails - 为后续请求存储对象

时间:2013-03-27 20:06:21

标签: grails groovy request

我有一个Web应用程序,并且前端向服务器发出ajax请求以获取数据。在控制器中我有以下逻辑:

def data = []

def method() {
  def objects = []
  ...
  from params determine if it is a first request
  ...
  if (firstRequest) {
    objects = someService.getObjectFromDB()
    data = objects
  } else {
    actions with data object
  } 

但问题是,对于2+个请求data是一个空列表,尽管在第一个请求期间我用所需信息填充它。如何使用data对象是2个以上的请求?

2 个答案:

答案 0 :(得分:3)

将数据对象存储在用户会话中,如:

session.data = objects

当你输入方法检查数据已经存在..

if (!session?.data) {
    // first request
    objects = someService.getObjectFromDB()
    session.data = objects
} else {
    // retrieve data from session
    def oldData = session.data
    // do something
}

这可能不是最好的解决方案,因为您会在会话中存储大量信息,因此请尽量将其限制在最低限度。

答案 1 :(得分:1)

我建议将上述逻辑从控制器移到服务类。这样做的好处: -

1.Service默认为singleton。您可以将范围设置为request,从而可以获得每个请求的全局数据句柄。

2.Session不会因数据而过载。

3.Best部分: - 您可以传递params& / | request(控制器的默认值)在方法调用中服务层。