Play framework 1.x 重定向删除动作

Posted

技术标签:

【中文标题】Play framework 1.x 重定向删除动作【英文标题】:Play framework 1.x redirect delete action 【发布时间】:2013-02-07 13:43:17 【问题描述】:

我想将动作调用从一个控制器重定向到另一个控制器。 ListController 显示条目列表,每个条目都有一个删除按钮。我不想在视图中使用具体的 EntryController 调用,因为我有一些稍后要实现的模拟控制器。

由于某种原因,play 不允许我调用 EntryController 上的动作,程序只是跳过调用线。调试播放代码发现ControllerInstrumentation.isActionCallAllowed()返回false。

列表控制器

public static void delete(Long id) 
  EntryController.delete(id);

ListController idndex 视图

#a @delete(id)delete/a

EntryController

public static void delete(Long id) 
  Entry entry = Entry.findById(id);
  entry.delete();

路线

DELETE /id         ListController.delete
DELETE /entries/id EntryController.delete

【问题讨论】:

【参考方案1】:

route 说 'EntryController.delete' 只接受 'DELETE' 方法。因此,当您进行直接函数调用时,它会发出 HTTP GET 请求。您应该在重定向时覆盖 http 方法。

列表控制器

public static void delete(Long id) 
    //EntryController.delete(id);
    Map<String, Object> args = new HashMap<String, Object>();
    args.put("id", id);
    args.put("x-http-method-override", "DELETE");
    String fullUrl = Router.getFullUrl("EntryController.delete", args);
    redirect(fullUrl);

【讨论】:

以上是关于Play framework 1.x 重定向删除动作的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework:验证错误重定向的最佳实践

scala路由设置(重定向)

在 Play 框架中重定向到同一控制器中的动作

来自 Google Play 的意图重定向

Facebook 请求重定向到 Play 商店(而不是实际应用,当它已经安装时)

将 Java 类导入 Groovy 模板(Play framework 1.x)