【问题标题】:How to override Joda-Time GSP tag output如何覆盖 Joda-Time GSP 标签输出
【发布时间】:2014-04-21 19:40:49
【问题描述】:

我正在为 Grails 使用 Joda-Time 插件,到目前为止,它的帮助很大。对 Java Date/Callendar 方法的巨大改进。无论如何,我正在使用 GSP 标签呈现期间数据,如下所示:

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

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

有人有这方面的经验吗?由于我在互联网上搜索过,我没有找到任何示例。我认为这也会对其他人有所帮助。

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

【问题讨论】:

    标签: grails groovy jodatime gsp


    【解决方案1】:

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

    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.
    

    【讨论】:

    • 这似乎是未来的最佳选择。自定义标签在 Grails 中相对简单。我的捷径是直接使用 Period 属性:${ shift?.totalTime?.hours }hrs. ${ shift?.totalTime?.minutes }min. 有时最简单的答案就隐藏在我们的眼皮底下。虽然,这并不是我想要的。自定义标签将是最好的长期解决方案。
    【解决方案2】:

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

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

    您可能需要从包含的源中编辑捆绑包。 :/

    【讨论】:

    • 感谢您的信息。我希望这是最后的手段。我一直在寻找源头,真的希望我不必这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多