我正在创建一个将各种类型的报告存储为域对象的Web应用程序,因此我有一个包含名称数据的域对象HeadOfHousehold
,以及对其他域对象的引用,例如{{1 },reports
和任何家属。我正在尝试构建最近查看/创建的addresses
对象的列表。经过多次Google搜索并搜索手册后,服务似乎是一个合适的解决方案。所以我创建了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.
}
以后的控制器中应该有哪些:
def clientListService
def index(){
hasSearched = false
clientListService = new ClientListService(message: "Hello")
[errorMessage: params.errorMessage, clients:clientListService]
}
然而,当我尝试获取消息时,看起来好像该对象为null。 来自我的index.gsp:
class HeadOfHouseHoldController {
def clientListService
def index() {
[customer: HeadOfHousehold.get(params.id), clients: clientListService]
}//...
所以我不知道我是不是正确定义会话(我没有做任何特别的事情),如果我误解了会话范围的工作原理,或其他什么。我确实在原始页面上看到了定义该对象的正确消息,但是我不会在任何后续页面上看到它。
另外,我不确定这是否是正确的方法;现在我真正需要的是我需要的***************${clients?.message}********************
列表(所以我可以从其他页面添加到列表中),但是我可以看到可能会在这样的类中添加其他逻辑和项目。
答案 0 :(得分:2)
我认为您正确理解了session
范围。每个带有session scope的Spring bean都绑定到HTTP会话。
但是你的第一个控制器列表完全没错。您不应该自己实例化服务类。这就是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")
并希望您的代码能够正常运行。希望这会有所帮助。