Grails会话服务范围未按预期工作

时间:2014-06-11 19:21:05

标签: grails grails-services

我正在创建一个将各种类型的报告存储为域对象的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}******************** 列表(所以我可以从其他页面添加到列表中),但是我可以看到可能会在这样的类中添加其他逻辑和项目。

1 个答案:

答案 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")

并希望您的代码能够正常运行。希望这会有所帮助。