2

アクション呼び出しをあるコントローラーから別のコントローラーにリダイレクトしたい。ListControllerはエントリのリストを表示し、それぞれに削除ボタンがあります。ビューで具体的なEntryController呼び出しを使用したくないのは、後で実装したい類似のコントローラーがいくつかあるためです。

何らかの理由で、playではEntryControllerでアクションを呼び出すことができず、プログラムは呼び出し行を飛び越えます。再生コードをデバッグすると、ControllerInstrumentation.isActionCallAllowed()がfalseを返すことがわかりました。

ListController

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

ListControlleridndexビュー

#{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
4

1 に答える 1

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);
}
于 2013-02-08T01:40:27.147 に答える