UrlMappings是一个很棒的链接功能,但它们也适用于表单吗?
假设我们有这样的映射:
"/map/$a" {
controller="form"
action="show"
}
现在将<g:link controller="form" action="show" params="[a:'test'] />
重写为
<a href="/appname/map/test" />
但是这样的形式:
<g:form controller="form" action="show">
<g:textField name="a" />
</g:form>
不会有同样的效果。这将导致请求/appname/form/show?a=whatever
我知道表单不能像HTML一样在HTML创建时重写 - 主要是因为此时参数的值不知道,但我希望这个URL会被重定向到& #34;漂亮&#34; URL。
有没有办法在grails中做这样的事情?或者我是否必须编写自己的重定向?
答案 0 :(得分:1)
正如您所提到的,由于未知的参数值,在页面渲染时无法完成。此外,您可以想象一旦超出一个表格字段后会出现的问题。
您可以编写一些JavaScript来在onSubmit中创建一个漂亮的URL,或者如果您在整个地方都可以创建一个自定义标记。
答案 1 :(得分:1)
我想我找到了答案:
URL重写似乎只在HTML呈现时才起作用。 所以
<g:form controller="form" action="show" params="[a:'test']">
<g:textField name="b" />
</g:form>
将导致/appname/map/test
。但这不是我想要的 - 我希望在提交表单时重写URL。
所以我想出了一个重定向行动:
class FormController {
def index() { }
def show() {
render("yep"+params.a)
}
def submit() {
redirect(controller:'form',action:'show',params:params)
}
}
我将表单重写为
<g:form controller="form" action="submit">
<g:textField name="a" />
</g:form>
这似乎很有效(以一次重定向为代价)