2

私は Play フレームワーク (2.1.3) から始めているので、これは簡単な質問のように思えますが、まだ解決策を見つけていません。

たぶん、それを機能させるための完全な他のアプローチがあるので、これに関する例を見つけられません。

3 つのオプションのフィルター値に基づいて値のリストを表示したいと考えています。

私のコントローラーは3つのパラメーターを受け入れます

public static Result index(Integer filterA, String filterB, String filterC)

リクエストを送信するルート

GET / controllers.Teachers.index(filterA :Integer = null, filterB = null, filterC = null)

これは次のような URL を受け入れますlocalhost:9000/?filterA=10&filterB=20&filterC=test

フィルターは、値をクリックするだけで 3 つのリストから選択できる必要があるため、テンプレート内のリンクは次のようになります。

<a href="@routes.Teachers.index()?filterA=10">Value for filter A</a>
<a href="@routes.Teachers.index()?filterB=20">Value for filter B</a>
<a href="@routes.Teachers.index()?filterC=test">Value for filter C</a>

これは、URL 生成の制御から外れているため、「再生方法」ではないと思います。さらに、2 つのフィルターを一緒に設定する場合は、選択したフィルターをテンプレート (パラメーターまたはセッション) に渡し、次のような複雑なリンクを設定する必要があります。

<a href="@routes.Teachers.index()?filterA=10&filterB=@selectedB&filterC=@selectedC">Value for filter A</a>
<a href="@routes.Teachers.index()?filterA=@selectedA&filterB=20&filterC=@selectedC">Value for filter B</a>
<a href="@routes.Teachers.index()?filterA=@selectedA&filterB=@selectedB&filterC=test">Value for filter C</a>

したがって、私の意見では、これは非常に一般的なユースケースですが、プレイ内でこれを簡単に行う方法がわかりません:)

4

1 に答える 1

4

テンプレートで引数を渡してアクションを呼び出す必要があります。

<a href="@routes.Teachers.index(10, null, null)">Value for filter A</a>
<a href="@routes.Teachers.index(null, 20, null)">Value for filter B</a>
<a href="@routes.Teachers.index(null, null, "test")">Value for filter C</a>

routesしたがって、ファイルにデフォルト値を入れる必要はありません。

GET / controllers.Teachers.index(filterA :Integer, filterB :Integer, filterC: String)

または、それらをオプションのままにしたい場合は、テンプレートが次の場合にそれらを呼び出すことができます。

<a href="@routes.Teachers.index(filterA = 10)">Value for filter A</a>
<a href="@routes.Teachers.index(filterB = 20)">Value for filter B</a>
<a href="@routes.Teachers.index(filterC = "test")">Value for filter C</a>

次のルートで:

GET / controllers.Teachers.index(filterA : Int ?= 0, filterB ?= null, filterC ?= null)

Java のはルート ファイル内のIntegerScala である必要があることに注意してください。Int

public static Result index(Integer filterA, String filterB, String filterC) {
    if (filterA == 0 && filterB == null && filterC == null) {
        return badRequest("No filter data...");
    }
    return ok("some filtering");
}
于 2013-08-09T11:54:54.187 に答える