Frage

Ich versuche, ein Session-Variable zu speichern und dann verwenden, um das Menü in Boot.scala zu ändern. Hier ist, wie ich die Variable in einem Snippet an Speicherung:

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")))
    }

Dann in Boot.scala ich dies tun:

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

Ich habe auch versucht, namentlich das Objekt zu nennen (sessionUserType), aber es kann es nie finden, so dass ich dachte, dies könnte Arbeit, aber ich halte ein leeres Feld bekommen, wenn ich es selbst zugreifen, obwohl die tatsächliche Bindung und Funktion erhält ausgeführt vor dem Menü-Rendering.

Jede Hilfe wäre sehr willkommen.

Danke

War es hilfreich?

Lösung

Um einen Wert von SessionVar oder RequestVar, Call is Methode auf, es zu erhalten, das heißt sessionUserType.is

Übrigens, haben Sie gelesen " Verwalten von Staats "

Side Hinweis:

Ich glaube, RequestVar ist eine bessere Passform in Ihrem Fall. Ich bin nicht sicher, könnte ich Ihren Code direkt ohne den Kontext fangen, aber es könnte zumindest wie folgt umgeschrieben werden:

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

Andere Tipps

Ich denke, die trennen ist, dass man davon aus, dass die eine Session Attribut wird Ihre SessionVar passen, und das nicht der Fall ist. Lift ist ein sehr sicherer Rahmen, und ein, wenn seine Funktionen sind, dass Lift schafft opaque GUIDs zu Komponenten auf der verweisen Server-Seite.

Wenn Sie getSessionAttribute zu Rückkehr etwas wollen, darüber nachzudenken, wie man setSessionAttribute nennen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top