h: inputText меняется на научную нотацию - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть элемент управления 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;
}

(в строковое представление):

public String getTableQuantityFormatted() {

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

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

и я изменил "value =" # {fee.tableQuantity} "на value =" # {fee.tableQuantityFormatted} "в моем xhtml

Но теперь я получаю следующую ошибку на странице xhtml:

Значение количества 10000000 неверен. /page/feeContent.xhtml @ 70,58 значение = "# {fee.tableQuantityFormatted}": Свойство 'tableQuantityFormatted' не доступный для записи по типу java.lang.String

1 Ответ

4 голосов
/ 22 февраля 2011
<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" %>

в моем случае.

...