是否可以覆盖方法的行为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