【问题标题】:Grails render changes url to indexGrails 渲染将 url 更改为索引
【发布时间】:2013-07-21 02:21:03
【问题描述】:

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

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中使用的,它基本上将action url更改为index,并将实际action作为post-method参数发送。为了在 url 中保存操作,我使用了而不是

【问题讨论】:

  • 这没有任何意义。我的意思是,你的问题是有道理的,但 grails 的行为没有。你有 index() 方法吗?对于这些可能导致奇怪的重定向 URL 的控制器操作,您是否有任何 URL 映射?
  • 不,我没有索引方法。我的这个控制器的 URL 映射是 ""/admin/product/$action?"(controller: "product")"。

标签: url grails


【解决方案1】:

它正在执行控制器重定向,但无法解析 URL。 IIRC,grails 会将附加参数传递给 index 方法以查找该操作。

如果你这样做,它就不会这样做:

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

【讨论】:

  • 我试过你的方法,但它仍然给我 url 中的索引。 (我使用它就像“else { initCreateProduct() }”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 2015-11-09
相关资源
最近更新 更多