我使用自定义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吗?
答案 0 :(得分:1)
删除内部引号和${}
:
<g:textField name="invoiceDate" value="${g.usDate(value:invoice.invoiceDate)}" />
这会将实际对象invoice.invoiceDate
传递给taglib,而不是创建包含对象的字符串表示形式的GString。
这有点令人困惑,但你需要记住${}
在不同的地方意味着不同的东西。作为标记属性,它表示“大括号内的内容是一个Groovy表达式,对其进行评估并将结果值直接传递给标记”。但是一旦你进入一个Groovy表达式,它就具有正常的GString含义“评估这个表达式并将其toString
表示插入到GString中。”