2

由于我从 Play 框架(2.1.3)开始,这对我来说似乎是一个简单的问题,但我还没有找到解决方案。

也许有一个完整的其他方法可以让它工作,这就是为什么我没有找到这方面的例子。

我想显示基于三个可选过滤器值的值列表。

我的控制器接受三个参数

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

向它发送请求的路由

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

这将接受像localhost:9000/?filterA=10&filterB=20&filterC=test

只需单击一个值,就可以通过三个列表选择过滤器,因此我在模板中的链接看起来像

<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。此外,当我想同时设置两个过滤器时,我必须将选择的过滤器传递给我的模板(参数或会话)并具有如下复杂链接:

<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 的Integer, 应该是Int路由文件中的 Scala :

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 回答