是否可以覆蓋方法的行爲CreateLink和CreateLinkTo?是否可以覆蓋方法** CreateLink **和** CreateLinkTo **的行爲?
回答
您可以使用元編程替換ApplicationTaglib上的閉包。
ApplicationTagLib.metaClass.getCreateLink = {->
return {attrs->
// your code here
}
}
我從來沒有嘗試過,但它可能工作:)
所有你需要做的就是創建一個屬於自己的標籤庫和自己定義的,即
class MyTabLib {
def createLink = {attrs, body ->
.... etc ....
}
def createLinkTo = {attrs, body ->
.... etc ....
}
}
Grails將標籤首先使用你的taglib。
希望這有助於!
謝謝你的回答。你能指定如何在這個標籤lig內調用原始的createLink。我只需要修改生成的鏈接只添加一個前綴。 (+1) – Luixv 2009-10-29 06:05:26
你應該可以做類似 def createLink = {attrs,body - > def apptag = new ApplicationTagLib() out << prefix; out << apptag.createLink(attrs,body); } – 2009-10-29 22:41:45
這有點晚了,但上面的解決方案並不適合我。我能夠成功地做到這一點,但:
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);
}
}
你基本上擴展了原來的標籤庫。由於「資源」標籤是對象的屬性(而不是方法),我不認爲你可以實際覆蓋它。相反,只需保存原始值並在對標記請求進行更改後再調用它。
哦..我重寫了'resource'標籤,但是這對'createLink'或'createLinkTo'(已棄用的'resource'標籤) – 2010-03-03 22:03:47
- 1. 如何覆蓋ApplicationTagLib的標準行爲#createLink和g:link?
- 2. 是否可以覆蓋NSUserDefault?
- 3. 是否可以使用LD_PRELOAD覆蓋主要方法?
- 4. 是否可以使用Dexmaker從現有類中覆蓋方法?
- 5. 是否可以使用Attribute來覆蓋方法?
- 6. 是否有可能將最終覆蓋的方法標記爲
- 7. 可以覆蓋是否被棄用?
- 8. 是否可以刪除或覆蓋cmdlet?
- 9. 是否可以在全局覆蓋print()?
- 10. 是否可以覆蓋/繞過nscd?
- 11. 可以覆蓋類別方法嗎? IOS
- 12. 是否可以覆蓋例外?
- 13. 是否可以通過XBAP覆蓋HTML?
- 14. 覆蓋方法上的Java Class.getMethods()行爲
- 15. 我可以讓WPF爲IsMouseOver覆蓋和覆蓋元素嗎?
- 16. 是否可以繼承不變的日期類並覆蓋__str__方法?
- 17. 我可以覆蓋doPost方法的servlet的方法,多次
- 18. 覆蓋方法
- 19. 新的HTML5表單類型的行爲是否可以被覆蓋?
- 20. 聲明爲「覆蓋」的方法是否保持「虛擬」?
- 21. 覆蓋方法
- 22. 我是否可以使用'open'只讀取和覆蓋一次?
- 23. 是否可以找出函數navigator.plugins是否被覆蓋
- 24. 是否可以在Java中實現/覆蓋+和++?
- 25. 覆蓋和隱藏方法
- 26. 覆蓋方法
- 27. 覆蓋'+'方法
- 28. 覆蓋方法
- 29. 擴展方法和方法覆蓋
- 30. UNION是否覆蓋以前的結果?'
你想重寫什麼行爲? – 2009-10-28 18:05:12
我想爲生成的鏈接添加一個前綴。我可以解決我的一部分問題,編寫一個方法HTMLCodec,它將返回帶有前綴的href。不幸的是,使用屬性SRC的標籤並非如此。據我所見,這個SRC是使用CreateLink或CreateLinkTo生成的。有可能有這種行爲? – Luixv 2009-10-28 18:29:02