Как я могу изменить способ GRAILS GSP fieldValue форматирует целые числа?
У меня есть поле в моем объекте домена, который я определяю как целое число ...
Integer minPrice
Затем я получаю к нему доступ на странице GSP следующим образом:
${fieldValue(bean: myBean, field: 'minPrice')}
и что я получаю в моем HTML ...
100,000
это не целое число, это строка. Что еще хуже, это отформатированная строка в определенной локали.
Это проблема, потому что у меня есть элемент управления SELECT в HTML FORM, который имеет (неординарный) диапазон значений для minPrice, который я хочу сохранить в своем доменном объекте как целые числа, и я не хочу сохранять индекс для какой-то массив значений, между которыми я должен неоднократно отображаться, я хочу само значение.
Мой элемент управления выглядит следующим образом ...
<g:select name="minPrice"
value="${fieldValue(bean: personInstance, field: 'minPrice')}"
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
['name':'100,000', 'id':100000],
['name':'200,000', 'id':200000],
['name':'300,000', 'id':300000]
]}"
optionKey="id" optionValue="name"
/>
Когда я получаю значение из поля SELECT для отправки обратно на сервер, оно правильно имеет целочисленное значение, которое я сохраняю. Однако обратная поездка никогда предварительно не выбирает правую строку в раскрывающемся списке, поскольку значение - это строка, разделенная запятыми.
Это хорошо работает в другом месте моего кода для небольших чисел, где форматирование запятой не вступает в игру, и круговая передача в и из SELECT успешно. Но значения> 999 не работают.
Документы говорят«Этот тег будет проверять bean-компонент, который был объектом привязки данных, и получать значение поля либо из первоначально представленного значения, содержащегося в объекте ошибок bean-компонента, заполняемого во время привязки данных, либо из значения свойства bean-компонента. Как только значение получается, что он будет автоматически закодирован в HTML. "
Это последний бит, которого я хочу избежать, поскольку он, кажется, форматирует целые числа. Итак, какую небольшую часть магии Grails / GSP мне нужно знать, чтобы я мог вывести мое Integer как целое число в мой SELECT и предварительно выбрать правильный ряд?
РЕДАКТИРОВАТЬ: Я попробовал кое-что еще, основываясь на ответах ниже, с довольно разочаровывающими результатами ...
Если я поставлю<gformatNumber/>
тег в моем<g:select/>
Я получаю код страницы в виде текста в браузере.
<g:select name="minPrice"
value='<g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />'
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
['name':'100,000', 'id':100000],
['name':'200,000', 'id':200000],
['name':'300,000', 'id':300000],
]}"
optionKey="id" optionValue="name"
/>
Используя тег числового формата из GSP для моего значения типа Integer 100000, как это ...
var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />;
дает100
, Помните, чтоfieldValue
отдает100,000
так что это не удивительно.
Если я использую jsp taglib, как это ...
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
var y = <fmt:formatNumber value="${fieldValue(bean: personInstance, field: 'minPrice')}" pattern=".00"/>;
Я получаю сообщение об ошибке от компилятора страницыCannot format given Object as a Number
.
Я предполагаю, что у меня есть более широкие опасения, чем то, что я не могу получить значение Integer как подлинное целое число в моем коде, если оно больше 999 из-за поведения по умолчанию (и не настраиваемого) директивы fieldValue. Однако моя конкретная проблема невозможности предварительно выбрать целочисленное значение в элементе управления SELECT не исчезла. В данный момент я немного растерялся.
У кого-нибудь есть еще идеи?