如果substring匹配,则在String字段中插入链接

时间:2012-10-31 14:45:12

标签: grails

我的域名中有一个“评论”字符串字段。在每次保存或更新字段时,我想检查该字段是否包含一个子字符串,该子字符串与同一域(或不同域)的字段中的字符串匹配。我需要遍历该字段的所有实例以查看是否存在匹配。如果匹配,我想将其转换为注释字段内的链接,以显示与该子字符串匹配的条目的显示操作。

因此,例如,带有序列号的产品的注释字段会通过在注释字段中提供产品序列号来说明产品是否已被另一个产品替换。喜欢:“这个产品被SN1234取代”。我想自动将SN1234转换为链接,以显示序列号为SN1234的产品。

最好的方法是什么?在控制器中,在GSP中?怎么样?

2 个答案:

答案 0 :(得分:1)

只要您尝试匹配的列已编入索引,您只需要对匹配进行查询,如果找到,请修改您的评论以包含该网址。控制器或服务对于查找并不重要(尽管我可能会把它放在服务中)。您需要确保搜索不是事务性的,因此它将尽可能快。我不能在GSP中做任何这样的事情。

要插入链接,您可以进行简单的查找和替换。一旦您知道要将哪个文本转换为链接,就会出现伪代码:

def comment = "This product was replaced by SN1234" 
def match = "SN1234"
def link = g.link(action: "show", controller: "product", id: "${product.id}", match)
comment = comment.replace(match, link)

然后你会以

结束
"This product was replaced by <a href='/product/1234'>SN1234</a>"

可能有更有效的方法可以做到这一点,但这是一个很好的起点。

答案 1 :(得分:0)

您可以使用GORM events在您的域中执行此操作。因此,无论何时插入/更新域,您都可以检查您的字段是否已更改。然后你可以插入你的链接。

def beforeInsert() {
    yourMethod()
}

def beforeUpdate() {
    if (isDirty('yourField')) {
        yourMethod()
    }
}