h:inputText改为科学记数法

时间:2011-02-22 00:21:36

标签: jsf formatting textbox scientific-notation

我有一个h:inputText控件,我可以输入最多7位的数字,并将它们转换为十进制表示(即输入“9999999”,它将呈现“9999999.0”)。但是,当我输入7位或更多数字的任何数字时,它会将其转换为科学记数法(即输入“10000000”并将其渲染为“1.0E7”)。

作为业务要求,我必须以十进制表示法显示它,而不是科学记数法。有没有人有办法做到这一点?

<h:inputText id="tableQuantityId" 
        value="#{fee.tableQuantity}" 
        disabled="#{!fee.selected}" 
        rendered="#{editable}" 
        validator="#{facesValidator.validateQuantity}">
    <a4j:support event="onchange" reRender="messages, feePart" ajaxSingle="true"/>
</h:inputText>

编辑经过一些进一步的调查后,似乎是从“double”类型获取当前格式。 (换句话说,您可以将“10000000”分配给双精度打印并以科学计数法显示给您。

所以我进入了我的getTableQuantity()方法并将其改为:

(双版)

public double getTableQuantity() {
    return tableQuantity;
}

(到String表示):

public String getTableQuantityFormatted() {

    double d = tableQuantity;
    NumberFormat formatter = new DecimalFormat("###.#####");

    String f = formatter.format(d);
    return f;
}

我在我的xhtml中更改了“value =”#{fee.tableQuantity}“to value =”#{fee.tableQuantityFormatted}“

但现在我在xhtml页面上收到以下错误:

  

数量值10000000是   不正确。   /page/feeContent.xhtml   @ 70,58   值= “#{fee.tableQuantityFormatted}”:   属性'tableQuantityFormatted'不是   可写在类型java.lang.String

1 个答案:

答案 0 :(得分:4)

<h:inputText 
id="xy"
value="10000000">
  <f:convertNumber maxIntegerDigits="10" maxFractionDigits="1" pattern="#########0.0"/>
</h:inputText>

标签f属于:

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

就我而言。