0

現在のセッションのドメイン クラス User にアクセスする必要があります。次のコードが機能します。

class RatingController {    
def rate = {
    def rating = params.rating
    def artist = Artist.get( params.id )
    def user = User.get(1)
    user.addToRatings(new Rating(artist:artist, rating:rating))
    user.save()
    render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
}

しかし、ID が 1 のユーザーを明示的に取得する (User.get(1)) 代わりに、現在のセッションのユーザーにアクセスする必要があります。次のコードを試しましたが、うまくいきません。

class RatingController {    
def rate = {
    def rating = params.rating
    def artist = Artist.get( params.id )
    def user = user.session
    user.addToRatings(new Rating(artist:artist, rating:rating))
    user.save()
    render(template: "/artist/rate", model: [artist: artist, rating: rating])
}
}

私はまだ httpSession の概念を完全に理解するのに苦労しているので、少し助けていただければ幸いです。少し早いですがお礼を。

アップデート

私の UserController では、認証は次のようになります。

def authenticate = {
  def user = User.findByLoginAndPassword(params.login, params.password)
  if(user){
    session.user = user
    flash.message = "Hello ${user.name}!"
    redirect(controller:"event", action:"list")
  }else{
    flash.message = "Sorry, ${params.login}. Please try again."
    redirect(action:"create")
  }
}
4

3 に答える 3

3

httpセッションは、ブラウザなどの単一のソースからの一連のリクエスト間で維持されるデータにすぎません。

セッションに何かを置くには、

session.setAttribute("key", value)

セッションからデータを取得するには、

session.getAttribute("key")

Grailsはまた、ここで概説されているように、セッションアクセスにいくつかの空想を追加します。彼らの例は

def user = session["user"]
session["user"] = "John"
asset "John" == session.user

認証と承認にgrailsプラグインを使用している場合は、おそらくユーザーを取得する方法を提供することに注意してください。たとえば、SpringSecurityは次のことを提供します

springSecurityService.getCurrentUser()

プラグインの詳細に応じて、そのユーザーはセッションに参加している場合と参加していない場合があります。

于 2011-06-24T15:48:53.887 に答える
2

あなたのコードで私はあなたが書いたことに気づきました

def user = user.session

私はあなたが意味すると思うとき

def user = session.user

session.userId = user.id私が行うもう1つのことは、それをsession.userIdにすることです。

def user = User.get(session.userId)

それが必要かどうかはわかりません。

于 2011-06-30T23:35:28.743 に答える