Question

Je suis en train de stocker une variable de session, puis l'utiliser pour modifier le menu Boot.scala. Voici comment je stocke la variable dans un extrait:

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

Ensuite, dans Boot.scala Je fais ceci:

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

J'ai aussi essayé d'appeler l'objet par son nom (sessionUserType), mais il ne peut jamais le trouver, donc je pensais que cela pourrait fonctionner, mais je continue à recevoir une boîte vide quand je y accéder même si la liaison réelle et la fonction s'exécution avant le rendu du menu.

Toute aide serait très apprécié.

Merci

Était-ce utile?

La solution

Afin d'obtenir une valeur de SessionVar ou RequestVar, appelez is méthode sur elle, à savoir sessionUserType.is

Par ailleurs, avez-vous lu " Gestion Etat "?

Side note

Je crois RequestVar est un meilleur ajustement dans votre cas. Je ne suis pas sûr que je pourrais attraper votre code droit sans le contexte, mais il pourrait être réécrite au moins comme:

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

Autres conseils

Je pense que la déconnexion est que vous présumez que Session Attribute va correspondre à votre SessionVar , et ce n'est pas le cas. Lift est un très rel="nofollow sécuriser cadre, et l'une de ses caractéristiques est que Lift crée opaques GUIDs de se référer à des composants sur la côté serveur.

Si vous voulez getSessionAttribute pour revenir quelque chose, pensez à comment vous pouvez appeler setSessionAttribute.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top