我的域对象中有一个字段,我将其定义为整数...
Integer minPrice
然后我在 GSP 页面中访问它,如下所示:
${fieldValue(bean: myBean, field: 'minPrice')}
我在 HTML 中得到的是……
100,000
这不是整数,而是字符串。更糟糕的是,它是特定语言环境中的格式化字符串。
这是一个问题,因为我在 HTML FORM 上有一个 SELECT 控件,该控件具有 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"
/>
像这样在我的整数值 100000 上使用 GSP 中的数字格式标签...
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
。
我想我有一个更广泛的担忧,而不是因为 fieldValue 指令的默认(和不可配置)行为,如果它大于 999,我似乎无法将整数值作为真正的整数放入我的代码中。但是,我无法在 SELECT 控件中预先选择整数值的具体问题并没有消失。目前我有点茫然。
任何人有任何进一步的想法?