【问题标题】:Type mismatch when passing a query parameter to a controller from a template将查询参数从模板传递到控制器时类型不匹配
【发布时间】:2015-04-14 03:57:51
【问题描述】:

我正在尝试设置一个允许可选查询参数的 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")

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

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    您已经阅读了 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
    

    这样说清楚了吗?

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多