gpt4 book ai didi

scala - Play 框架处理 session 状态

转载 作者:行者123 更新时间:2023-12-04 01:38:06 24 4
gpt4 key购买 nike

我有一个构建在 Play 框架和 Scala 之上的 Webapp。它是关于向用户呈现一组问题,每个问题都有一组答案。有些问题有单选按钮输入答案,有些问题有复选框作为答案。当用户单击开始测试时,我调用 Controller ,获取问题列表及其答案,并将结果作为案例类返回到 View 模板。我现在需要在用户回答每个问题时保持测试状态。他可以去上一个,下一个,我需要跟踪他回答的所有问题。

来自 Java EE 背景,我认为我可以在 session 中存储案例类并在我的 Controller 中操作它。但不幸的是,这看起来并不像那样,因为 Play 框架的 session 是 String, String 而不是 String, Object 的键值对。我现在被我的应用程序困住了,由于我对 Play 框架的经验有限,我想征求建议。

最佳答案

Play 框架中根本没有状态,因此如果您想在多个 HTTP 请求中保留一些数据,可以方便地使用 Session 范围,该范围实际上使用键/值对(字符串,字符串)创建 cookie,并且它们的大小限制为 4KB。

我的建议是用 Json 来做,Play-json 库很棒。如果您有带有 JSON 的模型 Read/Write/Format组合器比它简单。

Ok(render(Questions)).withSession("answers" -> Json.prettyPrint(Json.toJson(Answer)))

读取 session 值可以这样完成:
def index = Action { implicit request =>
session.get("answers").map { answers =>
val jsValueAnswers: JsValue = Json.parse(answers)
val answersModel: YourAnswerModel = Json.fromJson(jsValueAnswers)
Ok("Got previous answers and created session cookie with them")
.withSession("answers2" -> Json.prettyPrint(Json.toJson(answersModel)))
}
}

希望这对你有所帮助。

干杯

关于scala - Play 框架处理 session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772841/

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