如何在Play 2中的视图模板中定义路径中的多个值

时间:2015-12-09 17:34:58

标签: scala routes playframework-2.0

在我的Play 2.4.4项目中,我有一个视图模板,我想返回2个值,一个Long和一个String。

我有一个按钮,可以在我的控制器中调用适当的方法:

<p>
  <a href="@controllers.routes.Orders.rollbackStatus(order.id, order.status.toString)" 
     class="btn">@Messages("orders.rollback")</a>
</p>

我的控制器中的方法调用模型对象上的函数:

def rollbackStatus(id: Long, status: String) = Action {
  Order.demoteStatus(id, status)
  Redirect(routes.Orders.list())
}

在我的路由文件中,我已经定义了HTTP方法,URI和控制器方法:

GET  /orders/:id/:status  controllers.Orders.rollbackStatus(id: Long, status: String)

当我按下按钮时,我收到以下消息:

  

不好请求   要求&#39; GET / orders / 3,PLACED&#39; [无法将参数id解析为Long:对于输入字符串:&#34; 3,PLACED&#34;]

我已成功以相同的方式传递单个值。

以下是为/ orders:

定义的其余路由
GET /orders             controllers.Orders.list
GET /orders/pickorder   controllers.Orders.getOrder
GET /orders/:id         controllers.Orders.show(id: Long)
GET /orders/:id/:status controllers.Orders.rollbackStatus(id: Long, status: String)

1 个答案:

答案 0 :(得分:0)

我找到了答案,当您指定使用的第一个参数&#39; /:&#39;定义参数的名称。

所有后续参数仅用&#39; /&#39;分隔。

我相信这是因为&#39;:&#39;指定参数的开头但是Play文档

中并不清楚

以下是更正后的路线列表,所有其他代码与问题中提供的代码相同:

GET /orders             controllers.Orders.list
GET /orders/pickorder   controllers.Orders.getOrder
GET /orders/:id         controllers.Orders.show(id: Long)
GET /orders/:id/status controllers.Orders.rollbackStatus(id: Long, status: String)