至于现在,我的网址看起来像这样:/ 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”。
答案 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。