播放框架1.x重定向删除操作

时间:2013-02-07 13:43:17

标签: playframework playframework-1.x

我想将动作调用从一个控制器重定向到另一个控制器。 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

1 个答案:

答案 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);
}