1

私のルーターには

GET    /:namespace/:name    controllers.Application.page_view(namespace: String, name: String, redirect:Boolean ?= true)

URLで実行できる/main/home/main/name?redirect=0、デフォルト値以外のものが必要な場合。リバースルーターの呼び出しと同様のことをしたいのですが、たとえば、return redirect(routes.Application.page_view("main", "home")); 機能しません...そこにも「true」を含める必要があります(デフォルト)。呼び出しを行うことは可能です。オプションの変数を記載せずに?

4

1 に答える 1

1

いいえ、Javaの逆ルート引数またはビュー引数では不可能です。コントローラーでデフォルト値を指定する必要があります。

return redirect(routes.Application.page_view("main", "home", true));

一方、Scala駆動型ビューでは、必要に応じてそれを行うことができます。比較してください。

<pre>
    @(routes.Application.page_view("one", "two"))
    @(routes.Application.page_view("three", "four", true))
    @(routes.Application.page_view("five", "six", false))
</pre>

編集

あなたが自分自身を指摘したように、あなたのアクションをオーバーロードすることも可能です(しかし、ルートリゾルバーに関しては、他の名前を使用する必要があるので、sensu strictoをオーバーロードしないことに注意してください):

routes

GET     /:namespace/:name     controllers.Application.pageViewDefault(namespace: String, name: String)
GET     /:namespace/:name     controllers.Application.pageView(namespace: String, name: String, redirect: Boolean ?= true)

Controller

public static Result pageViewDefault(String namespace, String name) {
    return pageView(namespace, name, true);
}

public static Result pageView(String namespace, String name, boolean redirect) {
   if (redirect) //return some redirect...
   // in other case return a Result...
}

とにかく、私の経験から言えば、長時間実行すると不快になるでしょう。毎回(コントローラーとビューの両方で)、現時点でpageViewまたはを選択する必要があるかどうかを覚えておく必要がありますpageViewDefault。私見では、単一のアクションを使用し、必要に応じてデフォルトのリダイレクトを追加することを忘れないでくださいpageView(ns, n, true)-vs pageView(ns, n, false)

また、あなたのアプローチ*Defaultでは、ビュー内のアクションについて覚えておく必要がありますが、単一のアクションでは、次のことはしません。

<pre>
    @(routes.Application.pageViewDefault("one", "two"))
    @(routes.Application.pageView("three", "four", false))

    vs.
    @(routes.Application.pageView("one", "two"))
    @(routes.Application.pageView("three", "four", false))
</pre>

生活を簡素化するには、コントローラーで定数を宣言するだけです。

private static final boolean DEFAULT_REDIRECT = true;

したがって、後でデフォルトルートに使用できます。

return redirect(routes.Application.pageView( "main"、 "home"、DEFAULT_REDIRECT));

また、それぞれにオプションの引数を持つ多くのアクションがある場合は、アクション+専用ルートredirectを作成する必要があります。*Default

于 2013-03-23T22:59:01.097 に答える