是否可以创建自定义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标记吗?
答案 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>