Domanda

Sto cercando di memorizzare una variabile di sessione e quindi utilizzarlo per modificare il menu in Boot.scala. Ecco come sto Memorizzazione la variabile in un frammento:

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

Poi nel Boot.scala faccio questo:

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

Inoltre ho provato a chiamare l'oggetto in base al nome (sessionUserType), ma non riesco mai a trovare, così ho pensato che questo potrebbe funzionare, ma continuo a ricevere una scatola vuota quando accedo che anche se la funzione reale di rilegatura e vengono eseguiti prima il rendering menu.

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie

È stato utile?

Soluzione

Al fine di ottenere un valore da SessionVar o RequestVar, chiamare is metodo su di esso, cioè sessionUserType.is

A proposito, hai letto " Gestione Stato "?

Nota a margine

Credo RequestVar è una misura migliore nel tuo caso. Non sono sicuro che avrei potuto prendere il codice di diritto senza il contesto, ma potrebbe essere riscritto almeno come:

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

Altri suggerimenti

Credo che la disconnessione è che si stanno assumendo che il Attributo sessione sta per abbinare il vostro SessionVar , e che non è il caso. Lift è un rel="nofollow molto garantire quadro, e uno se le sue caratteristiche è che crea Ascensore GUID opachi di fare riferimento a componenti sulla lato server.

Se si desidera getSessionAttribute per tornare qualcosa, pensare a come si può chiamare setSessionAttribute.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top