如何在GSP中从常规辅助方法设置变量?

时间:2014-10-14 08:35:05

标签: grails gsp

我需要输出html,其中值取决于我拥有的对象类型(我在DB表示之间转换)。现在我的逻辑在g:if个表达式的块中。阅读和调试相对困难。

<g:if test="${o.isKindA}">
    <g:set var="x" value="${...}" />
    <g:set var="y" value="${...}" />
    ...
</g:if>
<g:else>
    <g:set var="x" value="${...}" />
    <g:set var="y" value="${...}" />
    ...
</g:else>

我特别有兴趣将这些值X和Y添加为o的方法。我想做的是使用视图助手设置它们,我理解为grails中的==“tag lib”:

// Tag Helper
//
class AmazingTagLib {
    def valueXFor = { attrs -> o.isKindA? 1 : 2 }
    ...
}

// The previous GSP, rewritten
//
...
<g:set var="x" value="${ valueXFor(o) }" />
然而,这是失败的。当我尝试使用x时,它被绑定到一个空的StreamCharBuffer,可能是因为我在out的实现中没有向valueXFor附加任何内容。它应该有我的助手的整数返回值。

如何在我的视图中使用此类功能辅助方法?

1 个答案:

答案 0 :(得分:1)

问题是默认情况下,标记库用于呈现out。在这种情况下,您希望从方法返回一个对象/值,并且需要告诉TagLib此方法与标准行为不同。添加以下内容可以解决问题:

class AmazingTagLib {
    static returnObjectForTags = ['valueXFor']
    def valueXFor = { attrs -> o.isKindA? 1 : 2 }
    ...
}