質問

私は、セッション変数を格納し、Boot.scalaにメニューを変更するためにそれを使用しようとしています。ここで私は、スニペットに変数を格納しています方法です。

object sessionUserType extends  SessionVar[String](null)
  def list (xhtml : NodeSeq) : NodeSeq = {

    Helpers.bind("sendTo", xhtml, 
                 "provider" -> SHtml.link("/providerlogin",() => sessionUserType("provider"), Text("Provider")),
                 "student" -> SHtml.link("/studentlogin",() => sessionUserType("student"), Text("Student")))
    }

次にBoot.scalaに私はこれを行います

val studentSessionType = If(() => S.getSessionAttribute("sessionUserType").open_!.equals("student"),
            "not a student session") 

私はまた、名前(sessionUserType)でオブジェクトを呼び出そうとしましたが、それはそれを見つけることはできませんので、私は、これはうまくいくかもしれないと思ったが、私はそれにアクセスするときに実際の結合および機能を実行しますにもかかわらず、空のボックスを取得しておきますメニューのレンダリングに先立ってます。

任意の助けもいただければ幸いです。

おかげ

役に立ちましたか?

解決

SessionVar又はRequestVarから値を取得するために、その上にメソッドを呼び出すis、すなわちsessionUserType.is

ところで、あなたは、 "を管理" を読みましたか?

サイドノート

私はRequestVarはあなたのケースでは、より良いフィット感であると信じています。私は右のコンテキストなしで、あなたのコードをキャッチできたかわからないが、それは、少なくとも同じように書き換えることができます:

case class LoginType
case object StudentLogin extends LoginType
case object ProviderLogin extends LoginType

object loginType extends RequestVar[Box[LoginType]](Empty)
// RequestVar is a storage with request-level scope

...
"provider" -> SHtml.link("/providerlogin",() => loginType(Full(ProviderLogin)), Text("Provider")),
// `SHtml.link` works in this way. Your closure will be called after a user
// transition, that is when /providerlogin is loading.
...

val studentSessionType = If(() => { loginType.is map {_ == StudentLogin} openOr false },
                "not a student session")
// As a result, this test will be true if our RequestVar holds StudentLogin,
// but it will be so for one page only (/studentlogin I guess). If you want
// scope to be session-wide, use SessionVar

他のヒント

私は切断があなたがのセッション属性のSessionVar の一致するように起こっている、それはそうではないこと。想定しているということだと思いますリフトは非常に の枠組みを確保され、かつ1その機能の場合はリフトが作成することです不透明なGUIDは上のコンポーネントを参照します サーバ側ます。

あなたはgetSessionAttributeが何かを返したい場合は、

、あなたはsetSessionAttributeを呼び出すことができる方法を考えてみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top