gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:41:21 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

8年前关闭。




Improve this question




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

  • 在实际 session 中存储一堆单独的变量。
  • 在 session 中存储域模型类对象。
  • 使用 session 范围的 Controller 并将变量存储为 Controller 字段或属性。
  • 使用 session 范围的 Controller 并将数据存储为存储在 Controller 中的域模型类对象。
  • 其他一些我还没有想到的方法。
  • 最佳答案

    我喜欢为这类事情使用 session 范围的服务。使用这种方法,您可以将 session 范围服务的代理注入(inject)到全局范围服务(或 Controller )中,这意味着您无需担心跟踪您放入 session 中的内容。

    有一个不错的小教程here这向您展示了如何混合不同范围的服务。看起来该教程的作者还编写了一个插件来简化该过程(尽管我实际上并没有尝试过该插件)。

    编辑:

    这是一个示例,展示了您如何设置它并实际使用服务代理将内容传递给您的 View :

    创建一个服务来保存你的 session 范围的东西,比如用户购物车或其他东西。它只是一个常规服务(引用其他服务等),但您可以将特定于 session 的内容存储为成员变量 -

    class MySessionScopedService {

    def currentUser
    def shoppingCart

    ...

    }

    resources.groovy ,为您的服务设置 session 范围的代理。而不是直接注入(inject) MySessionScopedService到其他服务中,您将为它注入(inject)一个代理。
    beans = {
    mySessionScopedServiceProxy(org.springframework.aop.scope.ScopedProxyFactoryBean) {
    targetBeanName = 'mySessionScopedService'
    proxyTargetClass = true
    }
    }

    最后,当你想引用你的服务时,你引用代理(注意我引用的是 mySessionScopedServiceProxy 而不是 mySessionScopedService )。您可以在任何全局范围的组件中引用代理,并且在运行时,Spring 将为当前 session 注入(inject)正确的代理。
    class MyController {
    def mySessionScopedServiceProxy
    def someOtherService

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

    关于session - Grails:在用户 session 期间存储数据的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21346614/

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