我正在尝试设置一个允许可选查询参数的URL。例如
myurl?number=1
尝试从模板内部将值传递给控制器时,出现编译错误。
例如
<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,则可以正常工作。但是,如果我尝试在模板中提供查询参数,它将失败。
以上是我从此问题获得的,这就是为什么我使用option设置路线的原因。
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")
如何将查询参数传递给控制器?
我已经阅读了Play框架中的反向路由,那么您很容易理解这一点。
然后,当您尝试使用可选的查询参数时,将终点定义为
GET /myurl/ controllers.Application.myurl(number: Option[Int])
您可以从模板中将其用作
<a href="@routes.Application.myView(Some(1))"></a>
该代码将被编译,但是您的IDE可能会向您显示错误,请忽略IDE的错误并直接从那里继续。
因此,每当您使用反向路由从模板调用动作时,都可以使用上述调用方法,并且将其按播放方式对待,/myrul?number=1
并且如果将此网址粘贴到浏览器中,myurl
则会调用您的动作,并且会处理number参数作为它的选择。
就像,我在我的应用程序之一中使用如下:
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
这清楚吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句