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引用它。