Scala长整型转换为字符串时打印空白

4
我正在尝试将User类的用户ID转换并存储在Play!会话变量中。然而,当我尝试打印该会话变量时,它返回一个空字符串。这是一个简单的身份验证。
身份验证期间:
session += "userid" -> user.id.toString

Printing session variable in Play! scala view:

@ctx("userid")

整个授权定义:
    def authenticate(login:LoginAttempt) = {
          println("in authenticate")
      User.authenticate(login.username, login.password) match {
            case Some(user:User) => {
              session += "username" -> user.emailAddress
              session += "userid" -> user.id.toString
              session += "name" -> user.name
          session += "accounts" -> user.accounts.toString
              Redirect(session("path").getOrElse("/"))
            }
            case _ => {
              flash += "error" -> "Wrong username or password."
              Action(Authentication.login)
            }
        }
    }

还有User类:

case class User(
  val id: Long,

一种解决方案?是什么导致无法将user.id存储在会话中?谢谢。

即使我确信您在发布此处之前已经验证了所有内容,但似乎存在初始化错误:您是否初始化了会话?您是否在使用之前初始化了用户? 否则,我不知道使用“Long”与“String”有什么区别。 - Christopher Chiche
两者都已经初始化,我可以验证,因为我可以访问我在会话中存储的字符串,比如用户名。我唯一的猜测是我可能缺少 Play! 会话变量的某个“特性”。 - crockpotveggies
实际上,我目前遇到了与liftweb相同的问题,但它可以使用SessionVar,而不能使用RequestVar - Christopher Chiche
1个回答

3

经过询问和进一步阅读,这确实是Play! 1.2.4框架的一个“特性”导致的。幸运的是,在v2中我们可以期待更多。

对于我们的特定应用程序,在处理会话变量时有第三个经常被忽视的步骤。您需要为每个变量都渲染renderArgs才能访问它们。因此,@ChrisJamesC的评论大部分正确:初始化中缺少了一步。

以下是在我们的Secure.scala控制器中发生的情况:

(session("userid"), session("username"), session("name"), session("accounts")) match {
            case (Some(userid), Some(username), Some(name), Some(accounts)) => {
                renderArgs += "userid" -> userid
                renderArgs += "username" -> username
                renderArgs += "name" -> name
                        renderArgs += "accounts"  -> accounts
                Continue
            }
            case _ => {
                session += "path" -> Request.current().path
                Action(Authentication.login)
            }
        }

在我的情况中,我没有意识到需要为每个想要存储和访问的变量使用renderArgs。但有一个要点:您仍然需要将每个变量存储为字符串。
然后,在每个Play!视图中,我可以这样访问变量:@ctx("userid") 我希望这能帮助未来使用Play!的人们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接