2

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

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

列表控制器

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

ListController 索引视图

#{a @delete(id)}delete{/a}

入口控制器

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

路线

DELETE /{id}         ListController.delete
DELETE /entries/{id} EntryController.delete
4

1 回答 1

2

route 说 ' EntryController.delete' 只接受 ' DELETE' 方法。因此,当您进行直接函数调用时,它会发出一个HTTP GETrequest 。您应该在重定向时覆盖 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);
}
于 2013-02-08T01:40:27.147 回答