最大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で書き込み可能ではありません