【问题标题】:Best practice to represent Money (value + currency) in Grails在 Grails 中表示货币(价值 + 货币)的最佳实践
【发布时间】:2016-04-16 04:42:19
【问题描述】:

我对 Java Currency 类型以及它在 Grails 中的使用方式不太熟悉。虽然,我还没有使用它,但我看到了一个标签<g:currencySelect> 可以在视图中使用。那么,我如何在域类中表示它。

class Money {
BigDecimal value
Currency currency
....
}

或者有没有更好的解决方案,它比较不同的货币对象,根据地区设置格式(欧盟中的“,”作为分隔符等)

提前致谢。 巴布。

【问题讨论】:

    标签: grails currency


    【解决方案1】:

    您应该使用 BigDecimal。 Groovy 和 Grails 也对它作为 GORM 域类的数据类型提供了出色的原生支持。有关使用它的原因,请参见此处

    What is the best data type to use for money in java app?

    【讨论】:

      【解决方案2】:

      您可能想看看Currencies plugin。它提供了一个 Money 类,用于持有不同货币的金额。它们可以像这样嵌入到域类中:

      class CustomerTransaction {
          Date date = new Date()
          Money amount
      
          static embedded = ['money']
      }
      

      【讨论】:

      • 看起来很有趣。使用 Money 的域类的外观和底层列类型是什么?
      • 感谢您的两位 cmets.. 货币插件提供了有关如何实现自己的想法..
      • 不要使用货币插件。它已经死了,坏了。
      • 自己在Grails域类中处理Currency没什么大不了的,Hibernate自动将货币代码(3个字母)保存为varchar。您只需要通过使用 String 值定义 getter 和 setter 来帮助 Grails UI,因为不存在带有 String 参数的构造函数: class MyDomainObj { BigDecimal amount Currency currency static transient ['currencyCode'] def setCurrencyCode(String currencyCode) { currency = Currency.getInstance(currencyCode) } String getCurrencyCode() { return currency.getCurrencyCode() } } 在您的 GSP 中使用“currencyCode”。
      【解决方案3】:

      使用 JScience 库。可惜它还没有在 Maven 存储库中,并且没有 Groovy 包装器来使其成为 Groovier (TM)。

      【讨论】:

        【解决方案4】:

        如果您还想获得实时汇率更新,那么以下插件可以帮助https://grails.org/ExchangeRates+Plugin 所有汇率均来自雅虎财经。

        【讨论】:

          【解决方案5】:

          由于最初的答案似乎已经过时,您可能想看看money-plugin,它是新鲜的并且目前正在维护。

          【讨论】:

            猜你喜欢
            • 2011-04-18
            • 2011-10-29
            • 1970-01-01
            • 2010-11-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-28
            • 2012-02-22
            相关资源
            最近更新 更多