在TagLibs中保持属性类一致

时间:2013-12-29 19:25:26

标签: grails taglib

我使用自定义TagLib格式化日期。从我的角度来看,我将域字段传递给TagLib,如下所示:

<g:usDate value="${invoice.invoiceDate}" />

在这种情况下,值会进入TagLib,其类型为Date。但是,当我尝试使用TagLib格式化字段的内容时:

<g:textField name="invoiceDate" value="${g.usDate(value:"${invoice.invoiceDate}")}" />

该值作为一种GStringImpl进入TagLib。我可以在textField上使用不同的语法,将值作为Date传递,以便我可以在两种情况下使用相同的TagLib吗?

1 个答案:

答案 0 :(得分:1)

删除内部引号和${}

<g:textField name="invoiceDate" value="${g.usDate(value:invoice.invoiceDate)}" />

这会将实际对象invoice.invoiceDate传递给taglib,而不是创建包含对象的字符串表示形式的GString。

这有点令人困惑,但你需要记住${}在不同的地方意味着不同的东西。作为标记属性,它表示“大括号内的内容是一个Groovy表达式,对其进行评估并将结果值直接传递给标记”。但是一旦你进入一个Groovy表达式,它就具有正常的GString含义“评估这个表达式并将其toString表示插入到GString中。”