Как обрабатывать локализованные числовые значения в Xpage?

У меня есть Xpage с тремя полями, все объявлены Number; Номинал, Цена и Сумма платежа. Я хочу рассчитать сумму платежа, используя номинальную цену *.

В SSJS onChange я использую следующий код:

var price = getComponent("Price").getValue();

чтобы получить значение из поля «Цена».

В Швеции мы вводим наши числовые значения как #.###,## 1.234,56

Если я введу значения Nominal = 10 и Price = 2,5 в свою Xpage и попытаюсь рассчитать, используя вышеупомянутую формулу, значение, хранящееся в var «price», преобразуется в 25 и имеет тип long.

Пожалуйста посоветуй

/M


person Mikael Andersson Wigander    schedule 31.01.2013    source источник
comment
Если в поле редактирования задан любой тип числа (Число, Валюта…), getValue() вернет длинное значение, если значение поля равно 2,5. Он преобразует его и удалит дробь как 2,5 -> 25   -  person Mikael Andersson Wigander    schedule 31.01.2013


Ответы (3)


Я идиот, к сожалению.

Сделал это:

<inputText value="#{document1.Price}" id="Price" required="true" size="10">
    <this.validators>
        <validateRequired message="Price is required">
        </validateRequired>
    </this.validators>
    <this.converter>
        <convertNumber type="number" locale="sv">
        </convertNumber>**
    </this.converter>
</inputText>

и это работает!

Спасибо ВСЕМ за участие

person Mikael Andersson Wigander    schedule 31.01.2013
comment
Хорошо. Я не заметил этого до того, как обновил свой ответ, но теперь есть и дополнительная информация. - person Panu Haaramo; 01.02.2013

Я так понимаю, "Цена" - это поле для редактирования? Если это так, вы можете установить его в поле «Число», а затем «Формат отображения» в валюте. Код валюты будет определять, как будет отображаться это число.

введите здесь описание изображения

Когда вы получите значение компонентов, оно должно вернуться как обычное число, с которым вы можете работать.

person Simon O'Doherty    schedule 31.01.2013
comment
Цена - это числовое поле, и getValue() вернет строку, но если для свойства type установлено числовое значение, getValue() возвращает длинное значение, поэтому удаляются все дроби... 2,5 стало 25 - person Mikael Andersson Wigander; 31.01.2013
comment
Если установлено значение «Валюта», результат удваивается, хотя дробь все еще удаляется, и результат равен 25 (2,5)… - person Mikael Andersson Wigander; 31.01.2013

getComponent получает значение компонента пользовательского интерфейса, и поэтому оно не обязательно отражает тип данных, которые будут сохранены (в пользовательском интерфейсе все является строкой). Это также медленный способ получить значение.

Вместо этого попробуйте datasourcename.getItemValueDouble("itemname"). Обратите внимание, что вам нужно использовать имя поля в форме, а не имя компонента.

Что касается числового формата, убедитесь, что ваш язык djConfig — Швеция, возможно, se-se. Для меня в Финляндии это выглядит так:

<script type="text/javascript" src="/xsp/.ibmxspres/dojoroot-1.6.1/dojo/dojo.js" djConfig="locale: 'fi-fi', parseOnLoad: true"></script>

Он должен использовать локаль браузера. Чтобы заставить это в SSJS, вы можете сделать:

context.setLocaleString("se-SE");

в событии beforePageLoad.

person Panu Haaramo    schedule 31.01.2013
comment
Обновлен ответ с некоторой информацией. - person Panu Haaramo; 31.01.2013
comment
Я проверил это сейчас и, боюсь, безрезультатно. Я застрял… - person Mikael Andersson Wigander; 31.01.2013
comment
@MikaelGrevsten никоим образом не влияет на то, что вы имели в виду, что языковой стандарт не изменился в исходном коде HTML или все еще возникают проблемы с полем валюты? Это меняет локаль в HTML для меня в 8.5.3FP3. - person Panu Haaramo; 01.02.2013
comment
Хорошо, я установил строку локали, как вы предложили. EditBox определяется как число с типом валюты. getComponent(Price).getValue() возвращает длинное значение 25 вместо значения 2,5 (строка или двойное число). Единственный способ получить значение из поля, с которым я могу работать, - это объявить его как строку, но тогда оно будет сохранено как таковое и будет неправильным. - person Mikael Andersson Wigander; 01.02.2013