微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Grails:在用户会话期间存储数据的最佳方法

以下哪种方法被认为是在用户会话期间在grails中存储数据的推荐方法

>在实际会话中存储一堆个别变量.
>在会话中存储域模型类对象.
>使用会话范围控制器并将变量存储为控制器字段或属性.
>使用会话范围控制器并将数据存储为存储在控制器中的域模型类对象.
>其他一些我还没有想过的方法.

解决方法

我喜欢使用会话范围的服务来做这种事情.使用此方法,您可以将会话范围服务的代理注入到全局范围的服务(或控制器)中,这意味着您无需担心跟踪放入会话的内容.

一个很好的小教程here,它向您展示如何混合不同范围的服务.看起来该教程的作者也编写了一个插件来简化这个过程(虽然我还没有尝试过这个插件).

编辑:

这是一个展示你如何设置它的例子.实际上使用服务代理将内容传递给您的视图:

创建一个服务,用于保存会话范围的内容,例如用户购物车或其他任何内容.它只是一个常规服务(引用其他服务等),但您可以将特定于会话的内容存储为成员变量 –

class MySessionScopedService {

    def currentUser
    def shoppingCart

    ...

}

在resources.groovy中,为您的服务设置会话范围的代理.您不是直接将MySessionScopedService注入其他服务,而是为其注入代理.

beans = {
    mySessionScopedServiceProxy(org.springframework.aop.scope.ScopedProxyfactorybean) {
        targetBeanName = 'mySessionScopedService'
        proxyTargetClass = true
    }
}

最后,当您想引用您的服务时,您引用代理(请注意我引用mySessionScopedServiceProxy而不是mySessionScopedService).您可以在任何全局范围的组件中引用代理,并且在运行时,Spring将为当前会话注入正确的代理.

class MyController {
    def mySessionScopedServiceProxy
    def someOtherService

    def index() {
        [shoppingCart: mySessionScopedServiceProxy.shoppingCart,currentUser: mySessionScopedServiceProxy.currentUser]
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Mip是什么意思以及作用有哪些
怎么测试Mip页面运行情况
MIP安装的具体步骤有哪些
HTML添加超链接、锚点的方法及作用详解(附视频)
MIP的规则有哪些
Mip轮播图组件中的重要属性讲解
Mip的内联框架组件是什么
怎么创建初始的MIP配置及模板文件
HTML实现多选框及无法提交多数据的原因分析(附视频)
HTML如何设置复选框、单选框以及默认选项?(图文+视频)