1

私はいくつかのルートを次のように定義しています:

Post /login  controllers.MyController.someMethod()

内部では、postリクエストからパラメータを抽出するためsomeMethodに使用します。DynamicForm

Postメソッドを使用してブラウザまたは任意のクライアントから正常に動作します。

しかし、アクションメソッド(たとえば)内でこのURLを呼び出す必要がありsomeAnotherMethod、いくつかのパラメーターも渡したい場合、どうすればこれを実現できますか?私が意味するのは:

public static Result someAnotherMethod() {
// want to put some data in post request body and
return redirect(routes.MyController.someMethod().url());
4

1 に答える 1

6

1.引数付き(リダイレクトではありません!)

Resultリダイレクトせずに他のメソッドから戻ることができます。

public static Result someMethod(){
    DynamicForm dynamicForm = form().bindFromRequest();
    return otherMethod(dynamicForm);
}

public static Result otherMethod(DynamicForm dataFromPrevRequest) {
    String someField = dataFromPrevRequest.get("some_field");
    Logger.info("field from request is: " + someField);
    return ok("Other method's Result");
}

2.キャッシュ付き(これらのソリューションでのPOSTデータのおそらく最良の置換)

また、着信要求からデータベースへのデータ、または「より安価な」キャッシュへのデータを保存してから、他の方法でフェッチすることもできます。

public static Result someMethod(){
    DynamicForm dynamicForm = form().bindFromRequest();

    Cache.set("df.from.original.request", dynamicForm, 60);
    return redirect(routes.Application.otherMethod());
}

public static Result otherMethod() {
    DynamicForm previousData = (DynamicForm) Cache.get("df.from.original.request");

    if (previousData == null) {
        return badRequest("No data received from previous request...");
    }

    // Use the data somehow...
    String someData = previousData.get("someField");

    // Clear cache entry, by setting null for 0 seconds
    Cache.set("df.from.original.request", null, 0);

    return ok("Previous field value was " + someData);
}

3.一般的なGETとして

最後に、必要な引数のみを使用してメソッドを作成し、それらを最初のメソッド(要求の受信)に渡すことができます。

public static Result someMethod(){
    DynamicForm df = form().bindFromRequest();

    return redirect(routes.Application.otherMethod(df.get("action"), df.get("id")));
}

public static Result otherMethod(String action, Long id) {
    return ok("The ID for " + action +" action was" + id);
}
于 2012-10-25T14:14:20.943 に答える