У меня есть поле в моем объекте области, который я определяю как Целое число...
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 директивы. Однако моя определенная проблема неспособности предварительно выбрать Целочисленное значение в ИЗБРАННОМ управлении не уходит. В данный момент я в чем-то вроде потери.
У кого-либо есть дальнейшие идеи?
Я думаю, у вас есть как минимум два возможных решения.
Один - использовать JSTL TAGLIB, как описано в документах .
Другой, прохладный способ - использовать тег «Форматизмы», включенный в Grails - также в документах .
Для вашей цели использование этого тега может выглядеть так:
<g:formatNumber number="${fieldValue(bean: myBean, field: 'minPrice')}" format="######" />
У меня есть решение / работа - раунд ... Ответ, кажется, «ничего не делай».
Вместо того, чтобы пытаться разбирать строгое число обратно в целое число, я оставил его как отформатированную строку для целей выбора. Это означало, что мне нужно было изменить свои значения из
из
, следующим образом:
<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 "." И мой десятичный разделитель ",", который для большой Европы, то мой код не будет работать.