我在 Grails 中使用了布局支持(sitemesh),效果很好。我想调整我的布局以使其取决于用户是否登录。
我的 grails-app/views/layouts/main.gsp 包含以下代码:
<g:if test="${user}">
Username: ${user.username}
</g:if>
但是,似乎 layout-GSP:s 无法访问模型,因此无法访问用户变量(尝试时出现“无会话”异常)。使我的布局取决于用户是否登录的推荐方法是什么?
提前致谢!
我在 Grails 中使用了布局支持(sitemesh),效果很好。我想调整我的布局以使其取决于用户是否登录。
我的 grails-app/views/layouts/main.gsp 包含以下代码:
<g:if test="${user}">
Username: ${user.username}
</g:if>
但是,似乎 layout-GSP:s 无法访问模型,因此无法访问用户变量(尝试时出现“无会话”异常)。使我的布局取决于用户是否登录的推荐方法是什么?
提前致谢!
我建议为此目的使用请求或会话范围。可能最干燥的方法是填充范围是一个过滤器。例如在文件 grails-app/conf/SecurityFilters.groovy 中(您需要创建它):
class SecurityFilters {
def filters = {
populateCurrentUser(controller: '*', action: '*') {
before = {
request.user = User.get(session.userId)
}
}
}
}
该示例假定您将当前用户的 id 存储在会话属性“userId”中,并且您有一个域类“User”。在布局中使用它就像这样简单:
<g:if test="${request.user}">
Current User: ${request.user.username}
</g:if>