f: convertNumber неправильно форматирует разделитель в ui:composition

в моем приложении мы используем некоторые поля ввода напрямую, а некоторые — через шаблон. Странно то, что в поле ввода в шаблоне разделителем является точка (.), а вне шаблона — ,

Оба входных текста полностью идентичны, мы даже безуспешно пытались установить одинаковую локаль для обоих:

в этом фрагменте это ,

<p:inputText value="#{manageContracts.dieselFloater}"
                                                                id="dieselFloater" required="true">
                                                                <f:convertNumber maxFractionDigits="2"
                                                                    minFractionDigits="2" locale="de"/>
                                                            </p:inputText>

в этом это а. (внутри ui:composition):

    <p:inputText value="#{_price}" style="width:140px">
                    <f:convertNumber maxFractionDigits="2" minFractionDigits="2" locale="de" />
                </p:inputText>

у кого-нибудь есть идея?


person user3172567    schedule 06.11.2014    source источник


Ответы (1)


Вы можете использовать pattern="" в <f:convertNumber>, чтобы указать, нужна ли вам точка (.) или запятая (,).

См. документацию: http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_convertNumber.html

См. пример: http://www.mkyong.com/jsf2/jsf-2-convertnumber-example/

ИЗМЕНИТЬ:

Чтобы исправить десятичный разделитель, см. этот обходной путь: Прослушиватель изменения локали JSF не является постоянным

Он состоит в том, чтобы обернуть <ui:composition> в <f:view locale="de">

person Thrax    schedule 06.11.2014
comment
Привет, добавление pattern=#0,00 тоже не сработало. ‹p:inputText value=#{bean.price} style=width:140px› ‹f:convertNumber pattern=#0,00 /› ‹/p:inputText› - person user3172567; 06.11.2014
comment
@user3172567 user3172567 Попробуйте проверить отображаемый HTML, чтобы убедиться, что это действительно не кома. Он может отображаться в виде точки, если ваш контейнер обрезается другим элементом или ваше переполнение скрыто. - person Thrax; 06.11.2014
comment
проверяя html-код, он говорит, что значение = 199,38. Я не знаю, почему он полностью игнорирует шаблон и/или локаль. - person user3172567; 06.11.2014
comment
@ user3172567 Шаблон должен быть #0.00. Точка в шаблоне предназначена для десятичного разделителя, а запятая — для разделителя групп. Поскольку вы указали немецкую локаль, десятичный разделитель — (.), а разделитель групп — (,). См. документацию: docs.oracle.com/javase/7. /docs/api/java/text/DecimalFormat.html - person Thrax; 06.11.2014
comment
Я, конечно, не знал этого, спасибо, что сказали мне. Сейчас я изменил его на pattern=#0.00' locale = en, так как мне нужен следующий формат: 123,45. Это тоже не сработало. - person user3172567; 07.11.2014
comment
Десятичный разделитель для английской локали - точка, поэтому ваш шаблон: pattern="#0.00' locale = "en" должен отображать 123.45. Это нормальное поведение. Используйте pattern="#0.00' locale = "de" для желаемого результата. - person Thrax; 07.11.2014
comment
Я использовал ‹f:convertNumber pattern=#0.00 locale=de /› для обоих входных текстов. Он работает, когда inputText не используется в ui:composition, в противном случае он отображает файл . вместо , - person user3172567; 07.11.2014
comment
Не знаю, что теперь делать... Попробуйте этот обходной путь: stackoverflow.com/questions/6109138/ (ответ BalusC состоит в том, чтобы обернуть ваш <ui:composition> в <f:view locale="de">) - person Thrax; 07.11.2014
comment
обертывание ui:composition в f:view с locale=de сработало, как и ожидалось, спасибо! - person user3172567; 10.11.2014
comment
@user3172567 user3172567 Рад, что нам удалось заставить это работать. Тогда я отредактирую свой ответ для будущих зрителей. - person Thrax; 10.11.2014