Pergunta

Estou tentando armazenar uma variável de sessão e depois usá -la para modificar o menu no boot.scala. Aqui está como estou armazenando a variável em um trecho:

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

Então em boot.scala eu faço isso:

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

Eu também tentei chamar o objeto por nome (sessionUserType), mas ele nunca pode encontrá -lo, então pensei que isso poderia funcionar, mas continuo recebendo uma caixa vazia quando o acessio, mesmo que a ligação e a função reais sejam executadas antes da renderização do menu.

Qualquer ajuda seria muito apreciada.

Obrigado

Foi útil?

Solução

Para obter um valor de SessionVar ou RequestVar, ligar is Método, ou seja, sessionUserType.is

A propósito, você leu "Gerenciando estado"?

Nota

Eu acredito RequestVar é mais adequado no seu caso. Não tenho certeza se poderia pegar seu código certo sem o contexto, mas pode ser reescrito pelo 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

Outras dicas

Eu acho que a desconexão é que você está assumindo que o a Atributo da sessão vai combinar com o seu SessionVar, e esse não é o caso. Elevador é muito seguro Framework, e outro, se seus recursos é que o elevador cria GUIDs opacos para se referir a componentes no lado do servidor.

Se você quiser getSessionAttribute Para devolver algo, pense em como você pode ligar setSessionAttribute.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top