gpt4 book ai didi

服务的 Grails Session 范围未按预期工作

转载 作者:行者123 更新时间:2023-12-02 15:07:48 26 4
gpt4 key购买 nike

我正在制作一个将各种类型的报告存储为域对象的 Web 应用程序,所以我有一个域对象 HeadOfHousehold其中包含名称数据和对其他域对象的引用,例如 reports , addresses ,以及任何家属。我正在尝试建立最近查看/创建的列表HeadOfHousehold对象。在多次谷歌搜索和搜索手册之后,服务似乎是一个合适的解决方案。所以我创建了ClientListService :

@Transactional
class ClientListService {
static scope = "session"
String message // right now I'll be happy to just see the same message across
// pages I can add a list and manipulate it later.
}

我以为我可以在我的各种 Controller 中引用它,它会持续存在这样的东西:
def clientListService

def index(){
hasSearched = false
clientListService = new ClientListService(message: "Hello")
[errorMessage: params.errorMessage, clients:clientListService]

}

这应该在以后的 Controller 中可用:
class HeadOfHouseHoldController {
def clientListService
def index() {

[customer: HeadOfHousehold.get(params.id), clients: clientListService]
}//...

但是,当我尝试获取消息时,它看起来好像对象为空。
从我的 index.gsp 中:
***************${clients?.message}********************

所以我不知道我是否没有正确定义 session (我没有做任何特别的事情),我是否误解了 session 范围的工作原理,或者其他什么。我确实在定义对象的原始页面上看到了正确的消息,但是在任何后续页面上都没有看到它。

另外,我不确定这是否是解决此问题的正确方法;现在我真正需要的是 HeadOfHouseholds的列表我需要的(所以我可以从其他页面添加到列表中),但是我可以看到可能将其他逻辑和项目添加到这样的类中。

最佳答案

我想你理解了session范围正确。每个 Spring bean 都有一个 session scope绑定(bind)到 HTTP session 。

但是你的第一个 Controller 列表做错了。您不应该自己实例化服务类。这就是 Spring (Grails) 所做的。

class FooController {
def clientListService // gets autowired by Grails/Spring

def index(){
hasSearched = false
clientListService.message = 'Hello' // only assign a String value to the service
[errorMessage: params.errorMessage, clients:clientListService]
}
}

这意味着你不能不做类似的事情
clientListService = new ClientListService(message: "Hello")

并期望您的代码能够正常工作。希望这可以帮助。

关于服务的 Grails Session 范围未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com