2014-03-13 39 views
1

我是新来的Scala和玩。玩框架2工作与Request.session价值没有行动功能

我想从视图中调用一个控制器func,但我不想返回结果类型。 我想要做的是修改Request.session值。

我做的方法是:1)的情况下

1)的情况下

控制器:

def func(id : Int)(implicit request: RequestHeader) = { ... } 

路线:

GET /cart/cancel/:id controllers.ProductController.func(id:Int) 

但它给了我一个编译错误:在这里找不到任何HTTP请求标题

所以我做的另一种方法2)的情况下

2)情况下

控制器:

def func(id : Int) = Action { implicit request => ... Ok()} 

是。有效。但是这次我返回了Result类型。 所以我有义务改变页面的状态

有没有办法处理没有动作功能的会话值(没有状态转换)?

谢谢!

回答

0

您可以使用情况2,做一些事情,如:

Ok().withSession(
    session - "id" + ("id" -> "newID") 
) 

然后,您可以通过Ajax调用你的控制器,例如,你的会话中的变化将被考虑在内,则可以应用更改到UI(如果有的话),一旦你从你的控制器获得Ok状态。如果没有明显的变化,那么你可以在那里停下来,所有以下与应用程序的交互将使用这个新的会话。

+0

如何在不返回'Result'的情况下做到这一点?我的意思是我怎样才能完成**案例1)**没有错误? – Augusto

+0

基本上,你不能,控制器是获取请求并返回响应的东西,而且这个响应必须是有效的响应。意思是,控制器必须返回Ok,NotFound ...这是控制器的定义。在Play中,您必须将控制器定义为某种Action,并且此操作将传递一个返回Result的函数。底线,你只能使用案例2. – Peter

+0

好吧,你说这是一个控制器的定义,我一直在寻找你说的话,但我没有找到任何赞扬的消息来源声称。你能为我提供一个来源吗? – Augusto