Grails渲染将url更改为索引

Grails渲染将url更改为索引,url,grails,Url,Grails,我的控制器上有一个方法,它基本上验证和保存实体,或者呈现错误(如果有): def initCreateProduct() { render view: "/admin/product/createProduct" } def createProduct(params) { def product = new Product(params) if (product.validate()) { flash.message = "product.createS

我的控制器上有一个方法,它基本上验证和保存实体,或者呈现错误(如果有):

def initCreateProduct() {
    render view: "/admin/product/createProduct"
}

def createProduct(params) {
    def product = new Product(params)
    if (product.validate()) {
        flash.message = "product.createSuccess"
        product.save(failOnError: true);
        redirect action: "initCreateProduct"
    } else {
        render view: "/admin/product/createProduct", model: [product: product]
    }
}
如果验证成功(浏览器中的URL为“product/initCreateProduct”,这是可以的),它可以正常工作,但如果验证失败,我的URL将更改为“product/index”,这是错误的。我需要的是在这两种情况下获得相同的URL(毕竟是同一个页面)。提前谢谢

更新:终于解决了


这个问题是由于在我的gsp中使用了,它基本上将操作url更改为索引,并将实际操作作为post方法参数发送。要在我使用的url中保存操作,而不是

,它执行控制器重定向,并且无法解析url。在IIRC中,grails将向index方法传递额外的参数以查找该操作

如果你做了这样的事情,它不会做:

if (product.validate()) {
        flash.message = "product.createSuccess"
        product.save(failOnError: true)
        initCreateProduct()
}

这真的没有道理。我的意思是,你的问题有道理,但grails的行为没有道理。有index()方法吗?这些控制器操作有可能导致奇数重定向URL的URL映射吗?没有,我没有索引方法。我的此控制器的URL映射为“/admin/product/$action?”(控制器:“product”)。我已经尝试了您的方法,但它仍然在URL中为我提供索引。(我使用过类似于“else{initCreateProduct()}”)