【问题标题】:Grails 2.4.2 URL mapping calling the wrong action in controllerGrails 2.4.2 URL 映射在控制器中调用错误的操作
【发布时间】:2015-01-26 20:26:31
【问题描述】:

我正在使用带有 RestfulController 的 Grails 2.4.2,而这个特定的控制器使用 PagingRestfulController。

当我在“/product/search”上执行 GET 时,我试图在产品控制器中运行操作 searchProducts,但它正在运行 queryForResource。

Grails 使用“/product”(resources:'product') URL 映射创建了 listAllResources 和 queryForResource。以下是我的 URL 映射和产品控制器的适用部分。如何调用搜索操作?

网址映射

"/product"(resources:'product')
"/product/search"(controller: 'product'){
    action = [GET: 'searchProducts']
}

产品控制器

protected List<Product> searchProducts(Map params) {
    log.debug("searching products...");
}

protected List<Product> listAllResources(Map params) {
    log.debug("listing all resources...");
}

protected List<Product> queryForResource(Serializable id) {
    log.debug("querying for resources...");
}

【问题讨论】:

    标签: grails url-mapping urlmappings.groovy


    【解决方案1】:

    您需要在您的控制器中定义一个公共的search 操作,它可能看起来像这样:

    def search() {
        searchProducts(params)
    }
    

    受保护的listAllResourcesqueryForResource 方法会覆盖RestfulController 中定义的辅助方法,但它们本身并不用作公开的控制器操作。

    然后,使用这个嵌套映射:

    "/product"(resources:'product') {
        "/search"(controller: 'product', action: 'search', method: 'GET')
    }
    

    【讨论】:

    • 它仍在运行 queryForResource
    • Andrew,感谢您的帮助,尽管它仍在运行 queryForResource
    • 更新:添加搜索视图解决了我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多