2017-02-04 1 views
0

В edit.gsp, где у меня есть поля ввода для десятичного числа, десятичное число отображается как «3.123», и если я сохранить его: я получил ошибку, поскольку десятичная точка неверна! Он ожидает «,». Моя местность - Швеция. Так что я должен вручную заменить точку запятой на все десятичные числа.Grails - Inputfields показывает точку ('.') Вместо (',') для десятичных чисел

Я осмотрел всю неделю и не нашел решения нигде. Не должен ли Grails быть последовательным и показывать запятые, когда он ожидает запятых в сохранении? Он должен работать как с BigDecimal, так и с двойным.

У меня есть Grails 3.2.4

Вот пример "г: поле" от редактирования-формы:

Bredd: <g:field type="number decimal" name="width" min="20" max="300" required="Y" value="${request1?.width}" style="width: 4em"/> 

Итак, что я могу сделать?

ответ

0

manually replacing dots звучит все ужасно и, возможно, неправильный подход.

Перемещенные сегменты ответа вокруг

Так обновление на ответ, так как я ударил подобный вопрос сегодня, возможно, в обратном направлении. Отправлено через номер 3333, когда проверка не удалась по другой причине, после того, как валидация завершилась, число в поле стало 3,333. Если старая проблема проверки исправлена, она теперь не будет выполнена из-за запятой в номере. Причина оказалась:

<g:textField value="${fieldValue(bean: instance, field: 'someField')}"

после возвращения изменили номер в 3,333 при изменении этого значения

value="${instance.someField}" 

Выше был фактический вопрос @larand сталкивается

Я бы хранить поле ввода width в качестве короткого

так:

Class MyClass { 

//if you are storing a number like 123 (non decimal) 
Short width 
//if you are storing 12.12 which becomes 1212 when stored 
Integer width 

BigDecimal getDecimalWidth() { 
    return new BigDecimal(this.width).movePointRight(2).setScale(2) 
} 
void setWidth(BigDecimal decimal) { 
    this.width=new BigDecimal(decimal).movePointLeft(2).setScale(2) 
} 
//unsure but think this should work 
    Integer getWidthInteger() { 
    return this.width as int 
} 
void setWidth(Integer integer) { 
    this.width=(byte)integer 
} 
} 

Это будет затем дать вам методы, чтобы получить короткое значение как большой десятичной, используя ${instance.decimalWidth} или как целое: ${instance.widthInteger}

, когда ваше поле actually numeric:

<g:formatNumber number="${myCurrencyAmount}" type="currency" currencyCode="EUR" />

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

После первой проверки вопрос был номером 3333 как положить. Так, может быть, это ваша проблема? Не уверен, так как вы говорите о точках

+0

Я не думаю, что у вас есть я. У меня есть много полей в классе, которые являются числовыми, как double, так и BigDecimal, но все они печатаются с помощью точки. И когда я сохраняю форму, грабли не принимают точки, граалю нужны запятые. Итак, почему грайлы печатают двойники и bigdecimals с точками, когда они не принимают точки? Уверенно что-то не так внутри, ошибка, неправильная конфигурация или что-то еще.Ваше решение все равно даст мне точку, но мне все еще интересно, что вы думаете, что это решение будет для меня. – larand

+0

вам нужно преобразовать Двойное число с точками в целое и сохранить, а затем конвертировать обратно с точками, то есть в bigDecimal для редактирования отображения, так что у вас есть двухсторонний процесс. http://stackoverflow.com/questions/4043579/converting-bigdecimal-to-integer. – Vahid

+0

, вы можете, очевидно, полагаться на объект домена, чтобы магически преобразовать заданный тип в правильный тип. Если все это работает слишком сложно, как описано выше, вы можете создать свой собственный ручной процесс во время процесса сохранения, который преобразует пользовательский ввод с двойного на целочисленный или короткий, а затем сохраняет значение. то при отображении переконвертировать назад – Vahid

Смежные вопросы