在 Java 网络项目中,我们使用 PrimeFaces 4.0 作为 JSF 扩展。现在我们在 PrimeFaces 中遇到了 Spinner (p:spinner) 组件的问题。我们将微调器嵌入到我们自己的自定义标记中以设置一些默认值,例如 stepFactor 和区域设置。 JSF 标记的主体如下所示:
<p:spinner id="#{id}" value="#{value}" min="#{min}" max="#{max}" stepFactor="0.1" size="5" onchange="#{onchange}" >
<f:convertNumber pattern="#0.00" locale="de_DE"/>
</p:spinner>
这对于组件的绑定(bind)和渲染来说效果很好。在下面的屏幕截图中,您会看到在“de_DE”语言环境中设置并正确格式化的 float 2.6f(使用逗号而不是点作为小数点分隔符)。
但是,当用户使用微调器按钮更改值时,格式立即出错。该值甚至从组件中解析错误。在下一个屏幕截图中,一旦我们单击“向上”按钮一次,您就可以看到完全相同的微调器。这实际上应该导致在组件中显示值“2,70”。
有没有人遇到过类似的问题?
是否有我们可以在此处应用的处理 p:spinner 组件的 JavaScript 的标准修复,或者我们是否真的需要深入研究 PrimeFaces JS 库并自行修复?
最佳答案
f:convertNumber
是服务器端转换。值的递增和递减事件是 JavaScript,在值返回到服务器之前不会考虑 f:convertNumber
,因此应该使用丑陋的 JavaScript 解决方案。
我已经为这个问题创建了一个补丁,我使用了 Number.prototype.toLocaleString()
将数字转换为本地化版本。
您所要做的就是包括 pf.spinner.local.fix.js
并按以下方式设置您的首选语言环境(在 document.ready
中):
PF('spinnerWidgetVarName').cfg['local'] = 'de-DE';
有几点需要注意:
- Number.prototype.toLocaleString()
- 此补丁已在 PrimeFaces 5.0 和 4.0 上进行测试和确认
关于javascript - 具有德语语言环境的 PrimeFaces Spinner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795175/