Как я могу изменить путь целые числа GRAILS GSP fieldValue форматов?

У меня есть поле в моем объекте области, который я определяю как Целое число...

Integer minPrice

Я затем получаю доступ к нему на странице GSP следующим образом:

${fieldValue(bean: myBean, field: 'minPrice')}

и то, что я вхожу в свой HTML...

100,000

который не является Целым числом, это - Строка. Хуже все еще это - отформатированная строка в конкретной локали.

Это - проблема, потому что я имею ИЗБРАННЫЙ контроль на HTML-ФОРМЕ, которая имеет (непорядковый) диапазон значений для 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 отправлять назад на сервер, это правильно имеет Целочисленное значение, которое я сохраняю. Однако обратная поездка никогда не предварительно выбирает правильную строку в выпадающем, потому что значение является разделенной Строкой этой запятой.

Это хорошо работает в другом месте в моем коде для небольших чисел, где форматирование запятой не играет роли, и распространение в прямом и обратном направлениях в и из ВЫБОРА успешно. Но значения> 999 не работают.

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

Именно тот последний бит, которого я хочу избежать, как это, кажется, форматирует Целые числа. Так, что немного волшебства Grails/GSP я должен знать, таким образом, я могу заставить свое Целое число быть представленным как целое число в мой ВЫБОР и предварительно выбрать правильную строку?

Править: Я попробовал некоторые дальнейшие вещи на основе ответов ниже с довольно неутешительными результатами до сих пор...

Если я поместил <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 на моем Целочисленном значении 100 000 как это...

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.

Я предполагаю, что у меня есть более широкое беспокойство, чем я, может казаться, не получаю Целочисленное значение как подлинное целое число в мой код, если это больше, чем 999 из-за значения по умолчанию (и не настраивается), поведение fieldValue директивы. Однако моя определенная проблема неспособности предварительно выбрать Целочисленное значение в ИЗБРАННОМ управлении не уходит. В данный момент я в чем-то вроде потери.

У кого-либо есть дальнейшие идеи?

5
задан Simon 22 January 2010 в 09:22
поделиться

2 ответа

Я думаю, у вас есть как минимум два возможных решения.

Один - использовать JSTL TAGLIB, как описано в документах .

Другой, прохладный способ - использовать тег «Форматизмы», включенный в Grails - также в документах .

Для вашей цели использование этого тега может выглядеть так:

<g:formatNumber number="${fieldValue(bean: myBean, field: 'minPrice')}" format="######" />
5
ответ дан 18 December 2019 в 07:29
поделиться

У меня есть решение / работа - раунд ... Ответ, кажется, «ничего не делай».

Вместо того, чтобы пытаться разбирать строгое число обратно в целое число, я оставил его как отформатированную строку для целей выбора. Это означало, что мне нужно было изменить свои значения из из , следующим образом:

<g:select name="minPrice" 
value="${fieldValue(bean: personInstance, field: 'minPrice')}"  
onchange="setDirty()"
noSelection='${['0':'Select a number...']}'
from="${[
    ['name':'100,000', 'id':'100,000'],
    ['name':'200,000', 'id':'200,000'],
    ['name':'300,000', 'id':'300,000']
    ]}"
optionKey="id" optionValue="name"
/>

, конечно, когда я отправляю обратно на сервер, значение, которое отправляется, является «100 000» в качестве бегаемой строки. То, что я понял, заключался в том, что Граальс, или весна или гибернат или что-то в стеке, сделали бы спутанность струны обратно в правый целочисленный тип перед настойчивостью.

Это работает просто для моих целей, однако я думаю, что он в основном работает - раунд, а не решением из-за проблем с локалом. Если моя тысяча сепаратора a "." И мой десятичный разделитель ",", который для большой Европы, то мой код не будет работать.

0
ответ дан 18 December 2019 в 07:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: