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

时间:2009-02-02 13:58:22

标签: model-view-controller grails sitemesh

我正在使用Grails中的布局支持(sitemesh)工作正常。我想调整我的布局,使其取决于用户是否登录。

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

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

但是,看起来好像layout-GSP:s无法访问模型,因此无法访问用户变量(尝试时我得到“No session”异常)。制作布局的推荐方法取决于用户是否登录?

提前致谢!

1 个答案:

答案 0 :(得分:9)

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

class SecurityFilters {

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

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

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