0

UrlMappings 是一个很棒的链接功能,但它们也适用于表单吗?

假设我们有这样的映射:

"/map/$a" {
    controller="form"
    action="show"
}

a<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 创建时重写表单 - 主要是因为此时参数的值未知,但我希望这个 URL 将被重定向到“nice” URL。

有没有办法在 grails 中做类似的事情?还是我必须编写自己的重定向?

4

2 回答 2

1

就像你提到的,由于未知的参数值,它不能在页面渲染时完成。另外,您可以想象一旦超出一个表单域会出现的问题。

您可以编写一些 JavaScript 来在 onSubmit 中创建一个漂亮的 URL,或者如果您在整个地方都这样做,您可能会创建一个自定义标签。

于 2012-02-23T19:44:32.667 回答
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>

这似乎很好用(以重定向为代价)

于 2012-02-23T19:45:46.643 回答