无需编写Groovy代码即可创建自定义GSP标记

时间:2013-11-29 22:37:38

标签: grails gsp

是否可以创建自定义GSP标记而无需编写Groovy代码并将HTML嵌入代码中(即更多JSP样式的创建自定义标记的方式)?

我有一个菜单,其中包含一系列项目:

<li class="menu-item">
  <g:link controller="someController" action="someAction" id="123">
    My Item Text
  </g:link>
</li>

我想创建一个新的GSP标记来简化我的页面,因为它会重复多次。所以,我想创建类似的东西:

<my:menuitem controller="someController" action="someAction" id="123" text="My Item Text"/>

我知道我可以使用Groovy代码创建自定义taglib并创建标记。但是我真的不喜欢将HTML嵌入到Groovy文件中的想法。过去,我基本上在JSP文件中创建了JSP taglib,而没有编写Java代码。到目前为止看Grails的文档我还没有看到类似的风格。

作为旁注,可以在GSP中使用自定义JSP标记吗?

2 个答案:

答案 0 :(得分:4)

您可以通过template标记使用render执行此操作,如文档的"Views and Templates"部分所述。值得注意的是,您使用前导下划线命名模板文件,但在没有下划线的render标记中引用它。

另一种方法是使用您所描述的自定义标记库,但使用Groovy MarkupBuilder创建HTML。这需要一点时间习惯(语法有点奇怪)但是一旦你做了几次就变成了第二天性。

答案 1 :(得分:2)

我可以看到在没有Taglib的情况下做你想做的唯一方法就是使用g:render并将你的值传递给model属性。像这样:

<g:render template="myTemplate" model="[controller: 'someController', action: 'someAction', id: 123, text: 'My Text Item']" />

然后在您的实际模板中,您将拥有以下内容:

<li class="menu-item">
  <g:link controller="${controller}" action="${action}" id="${id}">
    ${text}
  </g:link>
</li>