【问题标题】:Create custom Grails Tag Lib the generates code创建自定义 Grails Tag Lib 生成代码
【发布时间】:2016-12-09 23:32:48
【问题描述】:

是否有关于如何创建自定义 grails 标记的文档,该标记生成类似于“”和“”的常规代码?

使用普通的 grails 标签库,我能够生成 html 或原始输出,但我希望输出的代码可以解释为类似于 if 和 else 标签的工作方式。

以下是“if”标签的 Grails 源代码示例:

@Override
protected void outputStartTag(String envExpression, String testExpression) {
    out.print("if(");
    out.print(envExpression);
    out.print(" && ");
    out.print(testExpression);
    out.println(") {");
}

如何在我自己的 taglib 前缀中做类似的事情。

例子:

<mine:doSomethingCool key="foo">This text is conditionally shown</mine:doSomethingCool>

除了隐藏复杂的逻辑,我还想要这个功能,这样我就可以在我的自定义标签之后使用 标签。

一般来说,除了当前的 taglib 格式之外,我还想在我的工具箱中添加另一个工具。

【问题讨论】:

  • 您能否提供更多关于您想要实现的目标的详细信息?
  • 是的,我已将问题更新为更具体一点。
  • 如果你想要g:if标签在类固醇上,扩展原来的if标签
  • @injecteer 我可以创建自己的类并从 GroovyIfTag 扩展,但 grails 如何识别我的更改?如何命名我的标签?如何指定我的命名空间?
  • @injecteer 我刚刚找到了 GrailsTagRegistry,但我认为这让我进入了“g:”命名空间。这样就足够了,但我更喜欢我自己的。

标签: grails groovy gsp taglib


【解决方案1】:

例如,如果您只想在key == 'foo' 时呈现条件文本,您可以这样做:

class SomethingTagLib {

    static namespace = "ns"

    def doSomethingCool = { attrs, body ->
        if (attrs.key == 'foo') {
            out << body()
        }
    }
}

然后你可以像这样使用这个标签:

<ns:doSomethingCool key="foo">This text is conditionally shown<ns:doSomethingCool>

【讨论】:

  • 感谢您的反馈。我熟悉如何以这种方式创建标签库。我正在寻找更复杂的版本。我已经更新了我的问题,希望能反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 2016-10-03
  • 2015-11-24
  • 1970-01-01
相关资源
最近更新 更多