Java 斯卡拉演奏!表格+;动态路线

Java 斯卡拉演奏!表格+;动态路线,java,forms,scala,playframework-2.0,Java,Forms,Scala,Playframework 2.0,现在我的url是这样的:/chart?phrase=xxx 我想美化它,所以我创建了一条路线: GET /chart/:phrase controllers.Application.chart(phrase: String) 这是我以前的表格: @form(routes.Application.chart) { @inputText(tagForm("phrase"), 'placeholder -> "Phrase") <input

现在我的url是这样的:/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">
}
@表单(routes.Application.chart){
@输入文本(标记形式(“短语”),“占位符->短语”)
}
但编译器返回有关表单(调用)中缺少参数的错误。我怎样才能做到这一点

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

将您的url更改为

GET     /chart/:phrase          controllers.Application.chart(phrase: String)
看看你的模板

 routes.Application.chart("phraseValue")
现在url看起来像

/chart/pharseValue

编辑:不清楚您是否不需要查询参数,因此请查看


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

#  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

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

为了在提交表单时拥有漂亮的URL,我创建了两个路由:

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,在验证后,它将重定向到pretty url。

我得到的url如下:
/chart?phrase=value
。我想把它简化为
/chart/value
@m.cichacz,然后你必须使用
:pharse
然后我得到
短语值?短语=值
。我做错什么了吗?对不起,我说得不够清楚。不幸的是,反向路由部分并没有完全回答我的问题。写一个全新的函数在视图中保存一个单词真的值得吗?像这样重定向被认为是一种不好的做法,而且,使这项工作正常进行所需的额外代码将随着
表单的增加而成倍增加。请不要这样做。