Jak mogę zmienić sposób formatowania GRAILS GSP fieldValue liczb całkowitych?
Mam pole w moim obiekcie domeny, które definiuję jako liczbę całkowitą ...
Integer minPrice
Następnie uzyskuję do niego dostęp na stronie GSP w następujący sposób:
${fieldValue(bean: myBean, field: 'minPrice')}
a to, co dostaję w moim kodzie HTML to ...
100,000
która nie jest liczbą całkowitą, jest ciągiem. Co gorsza, jest to sformatowany ciąg w określonym języku.
Jest to problem, ponieważ mam formant SELECT na FORMIE HTML, który ma (nie porządkowy) zakres wartości minPrice, który chcę przechowywać w moim obiekcie domeny jako liczby całkowite, i nie chcę przechowywać indeksu do jakiś zestaw wartości, które muszę wielokrotnie mapować tam iz powrotem, chcę samej wartości.
Moja kontrola wyboru wygląda tak ...
<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"
/>
Gdy otrzymam wartość z pola SELECT, aby wysłać wiadomość z powrotem do serwera, poprawnie ma ona wartość całkowitą, którą utrzymuję. Jednak podróż powrotna nigdy nie wybiera wstępnie prawego wiersza z listy rozwijanej, ponieważ wartością jest ten ciąg rozdzielony przecinkami.
To działa dobrze w innym miejscu mojego kodu dla małych liczb, w których formatowanie przecinków nie wchodzi w grę, a podróż w obie strony z SELECT jest udana. Ale wartości> 999 nie działają.
Doktorzy mówią„Ten znacznik sprawdzi fasolę, która była przedmiotem powiązania danych i uzyska wartość pola albo z pierwotnie przesłanej wartości zawartej w obiekcie błędów komponentu bean, zapełniającej się podczas powiązania danych, albo z wartości właściwości komponentu bean. otrzyma automatycznie kodowanie HTML. ”
To ten ostatni bit, którego chcę uniknąć, ponieważ wydaje się formatować liczby całkowite. Więc, co trochę magii Grails / GSP muszę wiedzieć, więc mogę uzyskać moją liczbę całkowitą, która będzie renderowana jako liczba całkowita w moim SELECT i wstępnie wybrać odpowiedni wiersz?
EDYTOWAĆ: W oparciu o poniższe odpowiedzi wypróbowałem kilka dalszych rzeczy, a dotychczas bardzo rozczarowujące wyniki ...
Jeśli umieściłem<gformatNumber/>
tag w moim<g:select/>
Kod strony otrzymuję jako tekst w przeglądarce.
<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"
/>
Używając znacznika formatu liczb z GSP na mojej wartości całkowitej 100000 w ten sposób ...
var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />;
daje100
. Pamiętaj, żefieldValue
oddać100,000
, więc to nie jest niespodzianka.
Jeśli użyję tagspisu jsp w ten sposób ...
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
var y = <fmt:formatNumber value="${fieldValue(bean: personInstance, field: 'minPrice')}" pattern=".00"/>;
Dostaję błąd z kompilatora stronCannot format given Object as a Number
.
Domyślam się, że mam większy problem niż nie mogę uzyskać wartości Integer jako prawdziwej liczby całkowitej w moim kodzie, jeśli jest ona większa niż 999 z powodu domyślnego (i nie konfigurowalnego) zachowania dyrektywy fieldValue. Jednak mój specyficzny problem braku możliwości wstępnego wyboru wartości całkowitej w kontrolce SELECT nie zniknie. W tej chwili tracę trochę.
Czy ktoś ma jakieś dalsze pomysły?