我想将动作调用从一个控制器重定向到另一个控制器。 ListController显示一个条目列表,每个条目都有一个删除按钮。我不想在视图中使用具体的EntryController调用,因为我想要稍后实现一些类似的控制器。
由于某些原因,play不允许我在EntryController上调用动作,程序只是跳过调用行。在发现播放代码后,我发现ControllerInstrumentation.isActionCallAllowed()返回false。
ListController
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
答案 0 :(得分:2)
路线说“EntryController.delete
”仅接受“DELETE
”方法。因此,当您进行直接函数调用时,它会产生HTTP GET
请求。你应该在重定向时覆盖http方法。
<强> ListController 强>
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);
}