是否可以覆盖方法** CreateLink **和** CreateLinkTo **的行为?

时间:2009-10-28 17:40:20

标签: grails

是否可以覆盖 CreateLink CreateLinkTo 方法的行为?

3 个答案:

答案 0 :(得分:2)

您可以使用元编程替换ApplicationTaglib上的闭包。

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

我从来没有尝试过,但它可能有效:)

答案 1 :(得分:1)

您需要做的就是创建自己的taglib并自己定义标记,即

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

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

}

Grails将首先使用您的taglib。

希望这有帮助!

答案 2 :(得分: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);
 }
}

你基本上扩展了原始标签lib。由于'resource'标签是对象的属性(而不是方法),我认为你实际上不能覆盖它。相反,只需保存原始值,并在对标记请求进行更改后调用它。