Pregunta

Estoy tratando de almacenar una variable de sesión y luego utilizarlo para modificar el menú en Boot.scala. Así es como estoy almacenando la variable en un fragmento:

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

A continuación, en Boot.scala hago esto:

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

También traté de llamar al objeto por su nombre (sessionUserType), pero nunca lo encuentro, así que pensé que esto podría funcionar, pero me siguen dando una caja vacía cuando puedo acceder a él a pesar de que la función de unión y reales conseguir ejecutado previo a la prestación del menú.

Cualquier ayuda sería muy apreciada.

Gracias

¿Fue útil?

Solución

Con el fin de obtener un valor de SessionVar o RequestVar, llame is método en él, es decir sessionUserType.is

Por cierto, leíste " Administración del estado "

Nota al margen

Creo RequestVar es un mejor ajuste en su caso. No estoy seguro de que podría recuperar el código correcto sin el contexto, pero podría reescribirse al menos como:

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

Otros consejos

Creo que la desconexión es que usted está asumiendo que el de un atributo de sesión va a coincidir con su SessionVar , y que no es el caso. Ascensor es un rel="nofollow muy asegurar marco, y uno si sus características es que crea ascensor GUID opacos para referirse a los componentes de la del lado del servidor.

Si desea getSessionAttribute para regresar algo, pensar en cómo se puede llamar setSessionAttribute.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top