如何在显示之前格式化所有值

时间:2016-05-05 16:02:25

标签: java jsf

我遇到与货币格式有关的问题。在旧的源代码中,我们在UI上显示了很多fee value,但它们从未格式化过。

现在我们要在显示之前基于Locale格式化它们。

当前代码如下所示:

private BigDecimal userFee;

public void setUserFee(BigDecimal userFee) {
    this.userFee = userFee;
}

public BigDecimal getUserFee() {
    return userFee;
}

在jsp页面上

<h:outputFormat value="#{beanName.userFee}" />

问题是许多页面上的fee value次调度太多了。我能看到的唯一解决方案是逐个格式化它们,但看起来它不是一个好的选择。

我有两个问题:

  1. 在我的情况下格式化货币的最佳方式。

  2. 还有其他吗?     解决方案比逐个格式化所有fee value更好。

  3. 谢谢。

1 个答案:

答案 0 :(得分:-1)

我在最近的一个项目中所做的是创建一个包装BigDecimal的类,并覆盖它的tostring以根据需要对其进行格式化。根据您的抽象层,这个额外的层可能会给您带来问题。

public class Currency implements Serializable
{
    private BigDecimal value;

    public Currency(String val)
    {
        if(StringUtils.isNotEmpty(val))
            this.value = new BigDecimal(val).setScale(2, BigDecimal.ROUND_HALF_UP);
    }

    public Currency(Double val)
  {
        if(val!=null)
            this.value = new BigDecimal(val).setScale(2, BigDecimal.ROUND_HALF_UP);
  }

    public Currency(Float val)
  {
        if(val!=null)
            this.value = new BigDecimal(val).setScale(2, BigDecimal.ROUND_HALF_UP);
  }

    public BigDecimal getValue()
    {
        return value;
    }

    @Override
  public String toString()
    {
        if(value==null) return "";
        return new DecimalFormat("0.00").format(value);
    }
}