3

最大7桁の数値を入力できるh:inputTextコントロールがあり、それらを10進表現に変換します(つまり、「9999999」と入力すると「9999999.0」がレンダリングされます)。ただし、7桁以上の数値を入力すると、科学的記数法に変換されます(つまり、「10000000」と入力すると、「1.0E7」と表示されます)。

ビジネス要件として、科学的記数法ではなく、10進表現で表示する必要があります。誰かがこれを行う方法がありますか?

<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」タイプから現在の形式を取得しているようです。(つまり、doubleに「10000000」を割り当てて印刷すると、科学的記数法で表示されます)。

そこで、getTableQuantity()メソッドに入り、次のように変更しました。

(ダブルバージョン)

public double getTableQuantity() {
    return tableQuantity;
}

(文字列表現へ):

public String getTableQuantityFormatted() {

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

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

xhtmlで"value="#{fee.tableQuantity}"をvalue ="#{fee.tableQuantityFormatted}"に変更しました

しかし、xhtmlページで次のエラーが発生します。

数量値10000000が正しくありません。/page/feeContent.xhtml @ 70,58 value = "#{fee.tableQuantityFormatted}":プロパティ'tableQuantityFormatted'はタイプjava.lang.Stringで書き込み可能ではありません

4

1 に答える 1

5
<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" %>

私の場合。

于 2011-02-22T06:18:10.713 に答える