Mat*_*uer 10 javascript jsf primefaces jsf-2
在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>
Run Code Online (Sandbox Code Playgroud)
这适用于组件的绑定和呈现.在下面的屏幕截图中,您会看到一个float 2.6f,它已在"de_DE"语言环境中设置并正确格式化(使用逗号而不是点作为小数分隔符).

但是,当用户使用微调器按钮更改值时,格式化立即出错.该值甚至从组件中解析错误.在下一个屏幕截图中,一旦我们单击"向上"按钮,您就可以看到完全相同的微调器.实际上应该在组件中显示值"2,70".

以前有其他人有类似的问题吗?
是否有一个标准的修复程序来处理我们可以在这里应用的p:spinner组件,或者我们真的需要深入了解PrimeFaces JS库并自行解决这个问题吗?
f:convertNumber是服务器端的转换。递增和递减该值是JavaScript,f:convertNumber直到该值返回到服务器时才考虑在内,因此应采用难看的JavaScript解决方案。
我已经为这个问题创建了一个补丁,并且我曾经Number.prototype.toLocaleString()将数字转换为本地化版本。
您所需要做的就是pf.spinner.local.fix.js以以下方式(在中document.ready)包含并设置您的首选语言环境:
PF('spinnerWidgetVarName').cfg['local'] = 'de-DE';
Run Code Online (Sandbox Code Playgroud)
有两个注意事项:
