将查询参数从模板传递给控制器​​时类型不匹配

Type mismatch when passing a query parameter to a controller from a template

我正在尝试设置一个允许可选查询参数的 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,它就可以正常工作。但是,如果我尝试在模板中提供查询参数,则会失败。


以上是我从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")

如何将查询参数传递给控制器​​?

我已经阅读了 Play 框架中的反向路由,那么您应该很容易理解这一点。

当您尝试使用可选查询参数时,您将终点定义为

GET    /myurl/            controllers.Application.myurl(number: Option[Int])

您可以在模板中将其用作

<a href="@routes.Application.myView(Some(1))"></a> 

代码将被编译,但您的 IDE 可能会向您显示一个错误,请忽略 IDE 的错误并从那里继续。

因此,每当您使用反向路由从模板调用操作时,您都可以使用上述调用方法,它会被游戏视为 /myrul?number=1,如果您将此 url 粘贴到你的浏览器然后你的 myurl 操作将被调用并且数字参数将被视为它的选项。

就像,我在我的一个应用程序中使用如下:

我的终点

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

这样说清楚了吗?