Я бы хотел, чтобы люди могли входить / выходить на первой странице моего приложения Grails - PullRequest
0 голосов
/ 06 ноября 2010

Я хотел бы, чтобы вход и выход из системы выполнялись на первой странице моего приложения Grails, и там отображались все сообщения об ошибках.У меня есть функция аутентификации, закодированная в моем домене пользователя вместе с функцией выхода из системы.После того, как кто-то входит в систему с помощью функции аутентификации, мне удается вернуть его на главный экран, выполнив перенаправление:

redirect(uri:"")

Если я сделаю то же самое с выходом из системы, я получаю сообщение об ошибке, когда страницаотображается, говоря, что не может найти объект пользователя.Ниже приведены выходные данные.

Ошибка 500: Выполнение действия [выход из системы] контроллера [com.thornglatch.pingo.UserController] вызвало исключение: Нет такого свойства: имя для класса: com.thornglatch.pingo.User Возможные решения: сервлет игр: URI grails: /Pingo/grails/user/logout.dispatch Сообщение об исключении: Нет такого свойства: имя для класса: com.thornglatch.pingo.User Возможные решения: игры Причина: Нет такого свойства: имя для класса:com.thornglatch.pingo.User Возможные решения: игры Класс: UserController На линии: [25]

Вот то, что он пытается отрендерить, я считаю:

<div id="menu">
  <nobr>
    <g:if test="${session.user}">
      <b>${session.user?.firstName}&nbsp;${session.user?.lastName}</b> |
        <g:link controller="user" action="logout">Logout</g:link>
    </g:if>
    <g:else>
      <g:link controller="user" action="login">Login</g:link>
    </g:else>
  </nobr>
</div>

Спасибо заВаше время и внимание.


Вот код аутентификации:

def authenticate = {
    println "Authenticate Entered"
    def user = User.findByLoginAndPassword(params.login, params.password)
    println "User = [" + user + "]"
    if (user) {
        session.user = user
        def name = user.firstName ?: user.lastName
        flash.message = "Hello ${user.login}"
        redirect(uri:"")
    } else {
        println "Should be saying sorry"
        flash.message = "Sorry, ${params.login}. Please try again.}"
        redirect(uri:"")
    }
} // authenticate

Эта версия работает.В том, что не было, строка flash.message была:

flash.message = "Hello ${name}"

Я могу с этим смириться, но хотел бы знать, почему использование имени не сработало.

1 Ответ

0 голосов
/ 06 ноября 2010

Это не похоже на функциональную ошибку, как на проблему, которую вы описали. На самом деле фрагмент выглядит нормально, он вызывается правильно.

Кажется, проблема в том, что вы пытаетесь получить доступ к несуществующему свойству (name) во время выполнения в классе com.thornglatch.pingo.User.

Посмотрите на com.thornglatch.pingo.UserController строку 25 и убедитесь, что у name, к которому вы обращаетесь, есть сеттер и геттер, или это открытое поле в com.thornglatch.pingo.User. Или проверьте, что, если это переменная, объявление существует.

Помните, что Groovy - это динамический язык, поэтому вы должны быть осторожны, поскольку проверки доступа к полям членов будут происходить во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...