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