0

おそらく非常に簡単な解決策がある質問があります。私は grails 1.3.7 を実行していて、次のようなセッション変数を設定しようとしています:session["username"] = uNameここで、uName はデータベース クエリから返された値です。

私が抱えている問題は、キーワードsessionが grails によって認識されないように見えることです (下線が引かれています)。さらに、実際にアプリを実行しようとすると、次のエラーが発生しますNo such property: session for class:

輸入品はありませんよね?

4

2 に答える 2

2

sessionサービスやドメイン クラスではなく、コントローラー、taglib、および GSP でのみ変数を使用できます。スレッド ローカル ホルダーを介していつでもアクセスできますが、現在のスレッドがリクエスト ハンドラーである場合 (つまり、バックグラウンド スレッドでない場合) にのみセッションがあることに注意してください。

import org.springframework.web.context.request.RequestContextHolder

def currentRequest = RequestContextHolder.requestAttributes
if(currentRequest) { // we have been called from a web request processing thread
  // currentRequest is an instance of GrailsWebRequest
  currentRequest.session["uName"] = ...
} else {
  // not in a request handler thread, so no session available
}

ただし、通常は、HTTP リクエストへのアクセスを必要とするロジックを、常に「現在のリクエスト」があることがわかっているコントローラー (または taglibs) に保持することをお勧めします。

于 2012-07-10T22:32:24.710 に答える
0

セッション変数の保存は、ドメイン クラスではなくコントローラーで行う必要があります。@Igor Artamonov の有用なコメントに感謝します。

于 2012-07-10T17:45:30.030 に答える