1

我有一个 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+ 个请求?

4

2 回答 2

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
}

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

于 2013-03-27T20:30:14.083 回答
1

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

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

2.Session不会被数据超载。

3.Best part:- 你可以传入params&/| request(控制器的默认值)到方法调用中的服务层。

于 2013-03-28T01:45:09.713 回答