在Java Web项目中,我们使用PrimeFaces 4.0作为JSF扩展。现在我们遇到了PrimeFaces中Spinner(p:spinner)组件的问题。我们将微调器嵌入到我们自己的自定义标签中,以设置一些默认值,例如stepFactor和locale。 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>
这适用于组件的绑定和呈现。在下面的屏幕截图中,您会看到一个浮点2.6f已设置并在“de_DE”语言环境中正确格式化(使用逗号而不是点作为小数点分隔符)。
但是,当用户使用微调器按钮更改值时,格式化立即出错。该值甚至从组件中解析错误。在下一个屏幕截图中,一旦我们单击“向上”按钮,您就可以看到完全相同的微调器。实际上应该在组件中显示“2,70”值。
有没有其他人有这样的类似问题?
对于我们可以在这里应用的p:spinner组件的JavaScript是否有标准修复,或者我们真的需要深入了解PrimeFaces JS库并自行解决这个问题吗?
答案 0 :(得分:5)
f:convertNumber
是服务器端转换。递增和递减值的事件是JavaScript,f:convertNumber
不会被考虑,直到值返回到服务器,因此应该使用丑陋的JavaScript解决方案。
我已针对此问题创建了一个补丁,并使用Number.prototype.toLocaleString()
将该数字转换为本地化版本。
您只需要包含pf.spinner.local.fix.js
并按以下方式设置首选语言环境(document.ready
中):
PF('spinnerWidgetVarName').cfg['local'] = 'de-DE';
有几点需要注意:
答案 1 :(得分:0)
看起来像Primefaces Spinner不支持I18N。
自2010年以来,已发布了一条要求支持区域设置的论坛消息,但没有任何答案:http://forum.primefaces.org/viewtopic.php?f=3&t=6398
一种可能的解决方案是使用Primefaces&#39;扩展组件timePicker
并对其进行自定义以管理您的价值。
请参阅:http://www.primefaces.org/showcase-ext/sections/timePicker/basicUsage.jsf;jsessionid=7axadfz6by4g1787ncndsf12d
并且:https://github.com/primefaces-extensions/primefaces-extensions.github.com/wiki/PrimeFaces-Extensions-Locales
或者你可以试着搞乱JS ......