2014-06-17 78 views
0

至于现在,我有我的网址是这样的:?/图短语= 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"> 
} 

但编译器返回关于form(call)中缺少参数的错误。我怎样才能做这项工作?

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

回答

0

将网址变更为

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

,并在你的模板

routes.Application.chart("phraseValue") 

现在的URL看起来像

/chart/pharseValue 
+0

我得到这样的网址:'/ chart?phrase = value'。我想简化为'/ chart/value'。 –

+0

@ m.cichacz然后你必须使用':pharse' –

+0

然后我得到'phraseValue?phrase = value'。我做错了什么? –

0

编辑:这是不是清楚,你没't想要查询段落米,所以看看反向路由部分的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 
+0

抱歉不够清楚。不幸的是**反向路由**部分没有完全回答我的问题。 –

-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,在验证后它重定向到漂亮的网址。

+0

真的值得去写一个全新的功能来保存自己在视图中的一个词吗?像这样重定向被认为是不好的做法,而且使这项工作所需的额外代码将随着你的“表单”呈指数级增长。请不要这样做。 –