JSF从字符串舍入值

时间:2012-09-11 07:38:40

标签: jsf

我有一个JSF 1.2视图,它是一种报告生成器。 用户可以选择查询,配置一些值,然后请求数据库并收集数据。 之后,可以在dataTable中查看数据,最后导出到Excel。 到目前为止工作正常。

根据查询,列具有不同的类型,其中一个是Double。 Double值现在应该舍入......

由于有很多行(数十或数十万),我将所有数据收集为String 避免耗时的类型转换。 这很好,因为导出到Excel我也需要字符串(写入Office XML)。

但是现在进行了舍入。在dataTable中,双精度数应该是四舍五入的。 如果我有一个Double我可以很容易地使用f:convertNumber,但我没有。

我的想法是一个String转换器,它分析它是否是一个数值 然后格式化String。 (性能不是那么重要,因为有 在分页dataTable中只有30个左右的记录。我怎么做到这一点?

任何(其他)建议?谢谢!
马克

编辑:

现在解决了
  public class ReportStringConverter implements Converter {

  DecimalFormat f = new DecimalFormat("#0.00");  

  public Object getAsObject(FacesContext context, UIComponent component, String value)        {
    return value;
  }

  public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (isNumeric(value.toString())) {
      return f.format(Double.parseDouble(value.toString()));
    } else {
      return value.toString();
    }
  }

  private boolean isNumeric(String s) {
    try {
      double d = Double.parseDouble(s);
    } catch (NumberFormatException e) {
      return false;
    }
    return true;
  }

}

1 个答案:

答案 0 :(得分:2)

您可以使用表达式语言通过向其添加0将字符串转换为数字(例如:#{'35.75' + 0})。这样您就可以使用f:convertNumber

<h:outputText value="#{'35.75' + 0}">
  <f:convertNumber pattern="0"/>
</h:outputText>