0

grails アプリケーションの最初のページでログインとログアウトを行い、そこにエラー メッセージを表示したいと考えています。ログアウト機能とともに、ユーザードメインにコーディングされた認証機能があります。誰かが認証機能にログインした後、リダイレクトを実行してメイン画面に戻すことができます。

redirect(uri:"")

ログアウトで同じことをすると、ページがレンダリングされたときに、ユーザー オブジェクトが見つからないというエラーが表示されます。以下は出力です。

エラー 500: コントローラー [com.thornglatch.pingo.UserController] のアクション [ログアウト] を実行すると、例外が発生しました: そのようなプロパティはありません: クラスの名前: com.thornglatch.pingo.User 考えられる解決策: ゲーム サーブレット: grails URI: /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}"

私はこれに耐えることができますが、名前の使用が機能しなかった理由を知りたいです。

4

1 に答える 1

0

これは、あなたが説明した問題のように、機能エラーとしては見えません。実際、スニペットは問題ないように見え、正しく呼び出されています。

name問題は、クラスの実行時に存在しない () プロパティにアクセスしようとしているようですcom.thornglatch.pingo.User

com.thornglatch.pingo.UserController25 行目を見nameて、アクセスしている にセッターとゲッターがあるか、または の public フィールドであることを確認してくださいcom.thornglatch.pingo.User。または、変数の場合は宣言が存在することを確認してください。

Groovy は動的言語であるため、メンバー フィールドへのアクセス チェックは実行時に行われるため、注意が必要です。

于 2010-11-06T07:23:01.193 に答える