如何覆盖Joda-Time GSP标记输出

时间:2014-04-21 19:40:49

标签: grails groovy jodatime gsp

我正在使用Grails的Joda-Time插件,到目前为止它已经提供了巨大的帮助。比Java Date / Callendar方法有了很大的改进。无论如何,我使用GSP标签渲染Period数据如下:

<joda:formatPeriod value="${ shift?.totalTime }" fields="hours,minutes" />

标记将HTML呈现为11 hours and 32 minutes。这很好,但我需要覆盖文本并将其更改为11hrs. 32min.

有没有人有这方面的经验?我没有找到任何例子,因为我用谷歌搜索了互联网。我认为这也有助于其他许多人。

顺便说一句:我非常感谢Joda-Time的创作者。它是我发现的最有用的库/插件之一。

2 个答案:

答案 0 :(得分:2)

如果您不关心本地化文本并且只有几小时和几分钟,那么一个简单的解决方案就是编写自己的小标签来进行格式化。类似的东西:

def formatPeriod = { attrs ->
    def periodFormatter = new PeriodFormatterBuilder().appendHours().appendSuffix("hrs.").appendSeparator(" ").appendMinutes().appendSuffix("min.").toFormatter()

    out << periodFormatter.print(attrs.value)
}

以下是groovy shell的示例输出:

groovy:000> period = new Period().withHours(11).withMinutes(32)
===> PT11H32M
groovy:000> formatter = PeriodFormat.wordBased()
===> org.joda.time.format.PeriodFormatter@6d2ddeee
groovy:000> formatter.print(period)
===> 11 hours and 32 minutes
groovy:000> periodFormatter = new PeriodFormatterBuilder().appendHours().appendSuffix("hrs.").appendSeparator(" ").appendMinutes().appendSuffix("min.").toFormatter()
===> org.joda.time.format.PeriodFormatter@56048075
groovy:000> periodFormatter.print(period)
===> 11hrs. 32min.

答案 1 :(得分:0)

查看PeriodTagLib的源代码,它似乎将其委托给JodaTime的基于单词的PeriodFormat,默认情况下使用org.joda.time.format.message bundle中的值。< / p>

您可以尝试在grails-app / i8n / messages.proprties中自己的消息包中定义这些键,但我怀疑这会起作用。

您可能必须在包含的来源中编辑捆绑包。 :/