Grails动态url映射

Grails动态url映射,grails,Grails,我有一个产品列表,我正试图创建搜索引擎优化友好的网址 范例 domain.com/product/cell-phone-razor “手机剃须刀”是动态的数据库 我已经用以下代码成功地实现了这个行为 "/product/$url"(controller: "product", action:"show") 但是,在尝试映射与页面URL无关的其他操作时会出现问题。示例我有一个ajaxurldomain.com/product/setPrice,它被映射到show动作 除了前面的映射之外,我还可

我有一个产品列表,我正试图创建搜索引擎优化友好的网址

范例

domain.com/product/cell-phone-razor

“手机剃须刀”是动态的数据库

我已经用以下代码成功地实现了这个行为

"/product/$url"(controller: "product", action:"show") 
但是,在尝试映射与页面URL无关的其他操作时会出现问题。示例我有一个ajaxurl
domain.com/product/setPrice
,它被映射到show动作

除了前面的映射之外,我还可以通过向urlmapping添加以下内容来解决这个问题

"/product/setPrice" {
    controller = "product"
    action = "setPrice"
}

有没有更好的方法来配置我的url映射,这样我就不需要为每个动作映射添加规则了?

在我们的应用程序中,我们使用以下方法—不是说完美的方法。基本上,我们在URL的SEO部分添加URL片段(搜索引擎很乐意忽略这些片段)

    name product: "/$productName-p$productId" {
        controller = 'product'
        action = 'show'

        constraints {
            productName matches: '.+'
            productId matches: '^[0-9]+$'
        }
    }

在您的情况下,url应该类似于
domain.com/product/cell-phone-razor-p123455
,其中
123456
是产品id。

在我们的应用程序中,我们使用以下方法-不说是完美的方法。基本上,我们在URL的SEO部分添加URL片段(搜索引擎很乐意忽略这些片段)

    name product: "/$productName-p$productId" {
        controller = 'product'
        action = 'show'

        constraints {
            productName matches: '.+'
            productId matches: '^[0-9]+$'
        }
    }

在您的情况下,url应该类似于
domain.com/product/cell-phone-razor-p123455
,其中
123456
是产品id。

虽然没有我希望的那么动态,但这似乎是最好的解决方案

"/product/$url"(controller: "product", action:"show") { 
    constraints { 
        url(validator: { 
            return !(it in 
                ['setPriceAction', 'setAnotherAction']
            ) 
        }) 
    }
}

虽然没有我想要的那么有活力,但这似乎是最好的解决方案

"/product/$url"(controller: "product", action:"show") { 
    constraints { 
        url(validator: { 
            return !(it in 
                ['setPriceAction', 'setAnotherAction']
            ) 
        }) 
    }
}

我想尝试在不使用id的情况下执行此操作。我的产品列表很小,所以我正在寻找一个超级干净的url。问题是它强制我的所有Ajax调用使用show操作,而不是预期的操作。还要记住,映射是在先到先得的基础上工作的(Grails尝试按照映射文件中出现的指令顺序匹配URL)-如果您将
/product/setPrice
移动到
/product/$url
之前,那么您的setPrice将被正确调用。正确,这就是当前正在运行的atm,但是我希望有一个dynamc解决方案,可以避免在url映射中列出该页面的每个操作。不过,我很高兴你发布了你的示例,这是我将来需要的。在约束中,是否有方法匹配并忽略某些URL?操作本身可以映射!例如,
“/product/$action/$id”{controller='product'}
我想在不使用id的情况下尝试这样做。我的产品列表很小,所以我正在寻找一个超级干净的url。问题是它强制我的所有Ajax调用使用show操作,而不是预期的操作。还要记住,映射是在先到先得的基础上工作的(Grails尝试按照映射文件中出现的指令顺序匹配URL)-如果您将
/product/setPrice
移动到
/product/$url
之前,那么您的setPrice将被正确调用。正确,这就是当前正在运行的atm,但是我希望有一个dynamc解决方案,可以避免在url映射中列出该页面的每个操作。不过,我很高兴你发布了你的示例,这是我将来需要的。在约束中,是否有方法匹配并忽略某些URL?操作本身可以映射!例如,
“/product/$action/$id”{controller='product'}
我想在不使用id的情况下尝试这样做。我的产品列表很小,所以我正在寻找一个超级干净的url。问题是它强制我的所有Ajax调用使用show操作,而不是预期的操作。还要记住,映射是在先到先得的基础上工作的(Grails尝试按照映射文件中出现的指令顺序匹配URL)-如果您将
/product/setPrice
移动到
/product/$url
之前,那么您的setPrice将被正确调用。正确,这就是当前正在运行的atm,但是我希望有一个dynamc解决方案,可以避免在url映射中列出该页面的每个操作。不过,我很高兴你发布了你的示例,这是我将来需要的。在约束中,是否有方法匹配并忽略某些URL?操作本身可以映射!例如
“/product/$action/$id”{controller='product'}