Play for Scala:在ActionBuilder中,是否可以修改包装动作结果的会话?

时间:2014-02-20 19:12:29

标签: scala playframework-2.2 playframework-2.3

我的问题是SimpleResult似乎不允许对其会话进行读访问,只允许写访问(withSession)。

object MyAction extends ActionBuilder[MyRequest] {

    def invokeBlock[A](
        request: Request[A],
        block: (MyRequest[A]) => Future[SimpleResult]
    ): Future[SimpleResult] = {
        // do stuff, create x, y
        val resultFuture = block(MyRequest(x, y, request)
        // Now I want to modify resultFuture's session,
        // keeping any changes block might have done to request.session.
        // And I'd rather not parse result's headers by hand to do that.
    }
}

我错过了什么?

1 个答案:

答案 0 :(得分:1)

这在2.2.x中似乎是不可能的,但在2.3.x中 play.api.mvc.Result 有2个新方法 addingToSession removedFromSession 允许从结果添加和删除会话值。

所以上述问题可以通过以下方式解决:

...
resultFuture map (_.addingToSession(myKey -> myValue)(request))
...