因为我从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>
所以在我看来,这是一个非常常见的用例,但我还没想出如何在游戏中轻松做到这一点:)
答案 0 :(得分: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
应该是路径文件中的Scala 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");
}