gpt4 book ai didi

session - 在 Lift Scala 中存储 session 变量

转载 作者:行者123 更新时间:2023-12-04 07:14:15 25 4
gpt4 key购买 nike

我正在尝试存储一个 session 变量,然后使用它来修改 Boot.scala 中的菜单。这是我将变量存储在片段中的方式:

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

然后在 Boot.scala 我这样做:
val studentSessionType = If(() => S.getSessionAttribute("sessionUserType").open_!.equals("student"),
"not a student session")

我还尝试按名称(sessionUserType)调用对象,但它永远找不到它,所以我认为这可能有效,但是当我访问它时,我总是得到一个空框,即使实际的绑定(bind)和函数在菜单渲染。

任何帮助将非常感激。

谢谢

最佳答案

为了从 SessionVar 中获取值或 RequestVar , 调用is方法,即sessionUserType.is
顺便说一句,你读过“Managing State”吗?

边注

我相信RequestVar更适合您的情况。我不确定我是否可以在没有上下文的情况下正确捕获您的代码,但它至少可以重写为:

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

关于session - 在 Lift Scala 中存储 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1546810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com