斯卡拉玩!形式+动态路线

时间:2014-06-17 15:51:40

标签: java forms scala playframework-2.0

至于现在,我的网址看起来像这样:/ chart?phrase = xxx

我想美化它,所以我创造了一条路线:

GET     /chart/:phrase          controllers.Application.chart(phrase: String)

这是我的旧表格:

@form(routes.Application.chart) {

    @inputText(tagForm("phrase"), 'placeholder -> "Phrase") 

    <input type="submit" value="Search for phrase">
}

但编译器会在表单(调用)中返回有关缺少参数的错误。我怎样才能做到这一点?

请注意,我正在使用自定义类“tagForm”。

3 个答案:

答案 0 :(得分:0)

将您的网址更改为

GET     /chart/:phrase          controllers.Application.chart(phrase: String)

并在您的模板上

 routes.Application.chart("phraseValue")

现在网址看起来像

/chart/pharseValue

答案 1 :(得分:0)

修改:目前尚不清楚是否想要查询参数,因此请查看反向路由部分Play Documentation


查询参数不包含在路由URI中。有两种方法可以使用它们。一个需要默认值,另一个使用Option,具体取决于您的需求。

#  Defaults to an empty string if the query parameter is not in the URL.
GET     /chart         controllers.Application.chart(phrase: String ?= "")

#  Defaults to `None` if the query parameter is not in the URL.
GET     /chart          controllers.Application.chart(phrase: Option[String])

反向路线可以这样工作:

// Routes with default values
routes.Application.chart("test")    // Outputs /chart?phrase=test
routes.Application.chart()    // Outputs /chart

// Routes using `Option`
routes.Application.chart(Some("test"))    // Outputs /chart?phrase=test
routes.Application.chart(None)    // Outputs /chart

答案 2 :(得分:-1)

我找到了解决方案。也许它并不完美,但适合我的需要。

要在提交表单时拥有漂亮的网址,我创建了两条路线:

GET     /chart/:phrase          controllers.Application.chart(phrase: String)
GET     /getResult              controllers.Application.getResult

两个行动:

def chart(query: String) = Action { implicit request =>
    tagForm.bind(Map("phrase"->query)).fold(error,success)
}

def getResult = Action { implicit request =>
tagForm.bindFromRequest.fold(
  errors => BadRequest(...),
    req => {
      ...
      Redirect(routes.Application.chart(string))
    }
  )
}

并以表格形式:@form(routes.Application.getResult)

表单将tagForm提交给getResult,在验证后,它会重定向到漂亮的URL。