我有一个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个以上的请求?
答案 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
(控制器的默认值)在方法调用中服务层。