Как я могу изменить способ 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 не исчезла. В данный момент я немного растерялся.

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

Ответы на вопрос(8)

Ваш ответ на вопрос