我在我的域对象中有一个字段,我将其定义为整数...
Integer minPrice
Run Code Online (Sandbox Code Playgroud)
然后我在GSP页面中访问它,如下所示:
${fieldValue(bean: myBean, field: 'minPrice')}
Run Code Online (Sandbox Code Playgroud)
我在HTML中得到的是......
100,000
Run Code Online (Sandbox Code Playgroud)
这不是一个整数,它是一个字符串.更糟糕的是,它是特定语言环境中的格式化字符串.
这是一个问题,因为我对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"
/>
Run Code Online (Sandbox Code Playgroud)
当我从SELECT字段获取值以回发到服务器时,它正确地具有一个Integer值,我坚持这个值.但是,返回行程从不预先选择下拉列表中的右行,因为值是以逗号分隔的字符串.
这在我的代码中的其他地方可以很好地用于小数字,其中逗号格式化不起作用,并且SELECT的往返进出成功.但值> 999不起作用.
文档说"此标记将检查已成为数据绑定主题的bean,并从数据绑定期间填充的bean的errors对象中包含的最初提交的值或bean的属性值获取字段的值.获得该值后,它将自动进行HTML编码."
这是我想要避免的最后一点,因为它似乎格式化整数.那么,我需要知道什么样的Grails/GSP魔法,所以我可以将我的整数渲染为整数到我的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"
/>
Run Code Online (Sandbox Code Playgroud)
使用GSP中的数字格式标签对我的整数值100000这样...
var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />;
Run Code Online (Sandbox Code Playgroud)
给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"/>;
Run Code Online (Sandbox Code Playgroud)
我从页面编译器收到错误Cannot format given Object as a Number
.
我想我有一个更广泛的关注,因为fieldValue指令的默认(和不可配置)行为,如果它大于999,我似乎无法将Integer值作为我的代码中的真正整数.但是,我无法在SELECT控件中预先选择Integer值的具体问题不会消失.目前我有点不知所措.
有人有任何进一步的想法?
小智 8
你想显示原始数字吗?像100000?
您可以直接获得该字段:
${myBean.minPrice}
Run Code Online (Sandbox Code Playgroud)
我认为你至少有两种可能的解决方案.
一种是使用文档中描述的JSTL标记库.
另一种更酷的方法是使用grails中包含的'formatNumber'标记 - 也在文档中.
出于您的目的,该标记的使用可能如下所示:
<g:formatNumber number="${fieldValue(bean: myBean, field: 'minPrice')}" format="######" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15200 次 |
最近记录: |