playframework - Play框架1.x重定向删除操作

标签 playframework playframework-1.x

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

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

列表 Controller

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

ListController idindex View

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

入口 Controller

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

路线

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

最佳答案

路由说“EntryController.delete”仅接受“DELETE”方法。因此,当您进行直接函数调用时,它会在某种程度上发出 HTTP GET 请求。您应该在重定向时重写 http 方法。

列表 Controller

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

关于playframework - Play框架1.x重定向删除操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752566/

相关文章:

mysql - 在 Play Framework/JPA/hibernate 中截断表?

hibernate - Play Framework 1 使用什么来实现 ORM?

java - 哪个 ThreadPool 配置用于高度同步的应用程序?

exception - Play 框架中抛出的无法解释的 ClassCastException

scala - 如何在 Play 2.3.4 中设置 Assets 指纹?

gradle - gradle PlayRun任务:定义assetsDirs属性时的 “Cannot invoke method getAt() on null object”

java - 如何更新 Playframework 中模型的某个字段?

Docker SBT 构建卡在 M2 芯片上以部署到 GKE

java - jelastic cloud 中的 Play 框架部署

playframework - 在 "application.conf"文件中从 DEV 模式更改为 PROD 模式时会发生什么?