将查询参数从模板传递给控制器时类型不匹配
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
这样说清楚了吗?
我正在尝试设置一个允许可选查询参数的 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
这样说清楚了吗?