从 Grails 中的布局视图访问模型

Posted

技术标签:

【中文标题】从 Grails 中的布局视图访问模型【英文标题】:Accessing the model from a layout view in Grails 【发布时间】:2010-10-04 22:25:31 【问题描述】:

我正在使用 Grails 中的布局支持 (sitemesh),效果很好。我想根据用户是否登录来调整布局。

我的 grails-app/views/layouts/main.gsp 包含以下代码:

<g:if test="$user">
  Username: $user.username
</g:if>

但是,layout-GSP:s 似乎无法访问模型,因此无法访问用户变量(尝试时出现“无会话”异常)。使我的布局取决于用户是否登录的推荐方法是什么?

提前致谢!

【问题讨论】:

【参考方案1】:

我建议为此目的使用请求或会话范围。可能最干燥的方法是填充范围是一个过滤器。例如在文件 grails-app/conf/SecurityFilters.groovy 中(你需要创建它):

class SecurityFilters 

    def filters = 
        populateCurrentUser(controller: '*', action: '*') 
            before = 
                 request.user = User.get(session.userId)
            
        
    
    

该示例假定您将当前用户的 id 存储在会话属性“userId”中,并且您有一个域类“用户”。在布局中使用它就这么简单:

<g:if test="$request.user">
   Current User: $request.user.username
</g:if>

【讨论】:

以上是关于从 Grails 中的布局视图访问模型的主要内容,如果未能解决你的问题,请参考以下文章

Grails - 控制器和视图之间的通信

grails无法从插件中找到视图

Grails 从领域模型自动生成数据库

在哪里放置,以及如何访问 Grails 应用程序中的 jQuery 插件?

从 Grails 中的控制器渲染 json 视图

如何从 Grails 中的控制器访问域属性?