2009-02-02 4 views
5

Я использую поддержку макета (sitemesh) в Grails, которая отлично работает. Я хотел бы настроить мой макет, чтобы он зависел от того, зарегистрирован ли пользователь или нет.Доступ к модели из вида макета в Grails

Мой Grails-приложение/просмотров/макеты/main.gsp содержит следующий код:

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

Тем не менее, появляется, как будто макете-GSP: s не могут получить доступ к модели и, следовательно, пользователю переменная (при попытке получить исключение «Без сеанса»). Каким будет рекомендуемый способ сделать мой макет зависеть от того, зарегистрирован ли пользователь или нет?

Заранее благодарен!

ответ

9

Я бы предложил использовать либо запрос, либо область сеанса для этой цели. Вероятно, самым сухим способом является заполнение области действия фильтра. Например, в файл Grails-приложение/конф/SecurityFilters.groovy (вам нужно создать):

class SecurityFilters { 

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

В этом примере предполагается, что вы сохраняете идентификатор текущего пользователя в атрибуте сеанса «USERID» и что у вас есть класс домена «Пользователь». Использование его в макете так просто:

<g:if test="${request.user}"> 
    Current User: ${request.user.username} 
</g:if> 
Смежные вопросы