我试图设置一个允许可选查询参数的网址。例如
myurl?number=1
当我尝试从模板内部向控制器传递值时,我收到了编译错误。
e.g。
<a href="@routes.Application.myView(Option(1))"></a>
routes.conf
配置如下:
GET /myurl/ controllers.Application.myurl(number: Option[Int])
具体错误是:
Type mismatch. Expected Nothing, actual: Option[Int]
如果我直接在浏览器中点击URL,它就可以了。但是,如果我尝试在模板中提供查询参数,则会失败。
以上我来自this question,这就是我使用选项设置路线的原因。
GET /foo controllers.MyController.foo(name: Option[String], age: Option[Int])
和...
def foo(name: Option[String], age: Option[Int]) = Action { implicit request =>
Ok(s"Name is: $name, age is $age")
如何将查询参数传递给控制器?
答案 0 :(得分:0)
我已经阅读了Play框架中的反向路由,那么您很容易理解这一点。
当您尝试使用可选查询参数时,将结束点定义为
GET /myurl/ controllers.Application.myurl(number: Option[Int])
您可以在模板中使用
<a href="@routes.Application.myView(Some(1))"></a>
代码将被编译,但您的IDE可能会显示错误,忽略IDE的错误并从那里继续。
因此,无论何时使用反向路由从模板调用您的操作,您都可以使用上述调用方法,并将其视为/myrul?number=1
,如果您将此网址粘贴到浏览器中,则myurl
将调用1}}动作,并将数字参数视为其选项。
就像,我在我的一个申请中使用如下:
GET /file/:id @controllers.FileController.getFile(id:String,w:Option[Int],h:Option[Int])
<img src="@controllers.routes.FileController.getFile(company.logoPath,Some(150),None)" />
GET /file/1ecf481b-9fb3-4d9d-93f5-16b10a6cefa3?w=150 took 134ms and returned 200
这是否说清楚了?