Groovy / Grails Float и ввод чисел в формате HTML5 - PullRequest
2 голосов
/ 08 ноября 2011

В Groovy / Grails 2.0 у меня есть домен с переменной Float (например, Float weight = 25.28). Когда Grails генерирует форму с соответствующим полем ввода номера, валидация жалуется на значение 25,28 и принимает только значение типа int. Может ли кто-нибудь осветить, что с этим происходит? Заранее спасибо.

EDIT: В домене Gails объект (Double и BigDecimal для аргумента):

   Double weight = 350.26;
   BigDecimal width = 86.1;

Сгенерированный HTML:

<input id="weight" type="number" value="350.26" required="" name="weight">
<input id="width" type="number" value="86.1" required="" name="width">

... Оказывается, наш FF 7 в порядке с этими числовыми значениями, и Chrome выдает мне «Недопустимое значение» и принимает только целые числа. Есть идеи о том, что мне не хватает?

Ответы [ 3 ]

7 голосов
/ 13 марта 2012

Если вы используете _form.gsp 'grails generate-all', обновите сгенерированный входной элемент _form.gsp, добавив step = "0.001" или step = "0.1" или step = "any" или тому подобное.

http://code.google.com/p/chromium/issues/detail?id=44116

Один из способов получить это обновление во всех сгенерированных файлах _form.gsp - запустить 'grails install-templates', затем отредактировать src / templates / scaffolding / renderEditor.шаблон метода renderNumberEditor и добавьте step = "any" к каждому

3 голосов
/ 27 сентября 2012

Была такая же проблема.Для меня это было решено путем редактирования сгенерированного представления _form.gsp, как сказал jlpp, но изменив разметку входных данных следующим образом:

<input id="weight" type="number decimal" value="350.26" required="" name="weight">
<input id="width" type="number decimal" value="86.1" required="" name="width">

Обратите внимание на type = "number decimal" добавить десятичную поддержку при проверке браузера.Больше проблема с браузером, чем с Grails.Ура! * * 1006

2 голосов
/ 09 ноября 2011

Вы должны установить Locale в вашем приложении.Возможно, язык вашего сервера по умолчанию отличается от вашего клиента.Однако вы правы, что Grails должен справиться с этим.

Вот мой обходной путь: Вставьте это в свой Bootstrap.groovy:

Locale.setDefault(Locale.GERMAN);

Всегда используйте formatNumber, при печати в GUI:

${formatNumber(number:float, locale: Locale.GERMAN, format:'##0.00')}       

сделать соответствующий десятичный разделитель.Когда вы находитесь в контроллере и не имеете командного объекта, вам нужно будет проанализировать значение самостоятельно.Поэтому:

DecimalFormat decimalFormat = DecimalFormat.instance;
servicePrice.price = decimalFormat.parse(params.price);

Вам не нужно делать это, когда вы вместо этого используете объект команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...