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

时间:2015-04-14 03:57:52

标签: scala playframework

我试图设置一个允许可选查询参数的网址。例如

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")

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

1 个答案:

答案 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

这是否说清楚了?