Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在显示之前格式化所有值_Java_Jsf - Fatal编程技术网

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

Java 如何在显示之前格式化所有值,java,jsf,Java,Jsf,我有一个关于货币格式的问题。在旧的源代码中,我们有很多费用值显示在UI上,但它们从未格式化 现在,我们希望在显示之前根据区域设置对它们进行格式化 当前代码如下所示: private BigDecimal userFee; public void setUserFee(BigDecimal userFee) { this.userFee = userFee; } public BigDecimal getUserFee() { return userFee; } 在jsp页面

我有一个关于货币格式的问题。在旧的源代码中,我们有很多
费用值
显示在UI上,但它们从未格式化

现在,我们希望在显示之前根据区域设置对它们进行格式化

当前代码如下所示:

private BigDecimal userFee;

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

public BigDecimal getUserFee() {
    return userFee;
}
在jsp页面上

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

问题是在多个页面上有太多的
费用值
dispay。我能看到的唯一解决方案是将它们逐个格式化,但这似乎不是一个好的选择

我有两个问题:

  • 在我的例子中,设置货币格式的最佳方法

  • 还有别的吗 解决方案优于逐个格式化所有
    费用值


  • 谢谢。

    在最近的一个项目中,我所做的是创建一个类来包装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);
        }
    }
    

    为什么不使用h:outputText,并将
    放在每个文本中?请参阅。因为将来我们计划将数字缩短为300.000到300k。听起来您应该为应用程序编写自己的类,并让每个货币h:outputText引用它。