2009-10-28 70 views
2

是否可以覆蓋方法的行爲CreateLinkCreateLinkTo是否可以覆蓋方法** CreateLink **和** CreateLinkTo **的行爲?

+0

你想重寫什麼行爲? – 2009-10-28 18:05:12

+0

我想爲生成的鏈接添加一個前綴。我可以解決我的一部分問題,編寫一個方法HTMLCodec,它將返回帶有前綴的href。不幸的是,使用屬性SRC的標籤並非如此。據我所見,這個SRC是使用CreateLink或CreateLinkTo生成的。有可能有這種行爲? – Luixv 2009-10-28 18:29:02

回答

2

您可以使用元編程替換ApplicationTaglib上的閉包。

ApplicationTagLib.metaClass.getCreateLink = {-> 
    return {attrs-> 
     // your code here 
    } 
} 

我從來沒有嘗試過,但它可能工作:)

1

所有你需要做的就是創建一個屬於自己的標籤庫和自己定義的,即

class MyTabLib { 
    def createLink = {attrs, body -> 
    .... etc .... 
    } 

    def createLinkTo = {attrs, body -> 
    .... etc .... 
    } 

} 

Grails將標籤首先使用你的taglib。

希望這有助於!

+0

謝謝你的回答。你能指定如何在這個標籤lig內調用原始的createLink。我只需要修改生成的鏈接只添加一個前綴。 (+1) – Luixv 2009-10-29 06:05:26

+0

你應該可以做類似 def createLink = {attrs,body - > def apptag = new ApplicationTagLib() out << prefix; out << apptag.createLink(attrs,body); } – 2009-10-29 22:41:45

1

這有點晚了,但上面的解決方案並不適合我。我能夠成功地做到這一點,但:

public class MyTagLib extends ApplicationTagLib { 

    def oldResource 

    public MyTagLib() { 
    // save the old 'resource' value 
    oldResource = resource; 
    resource = staticResource; 
    } 

    def staticResource = { attrs -> 
    // dork with whatever you want here ... 
    // ... 
    out << oldResource(attrs); 
} 
} 

你基本上擴展了原來的標籤庫。由於「資源」標籤是對象的屬性(而不是方法),我不認爲你可以實際覆蓋它。相反,只需保存原始值並在對標記請求進行更改後再調用它。

+0

哦..我重寫了'resource'標籤,但是這對'createLink'或'createLinkTo'(已棄用的'resource'標籤) – 2010-03-03 22:03:47