PrimeFaces Spinner具有德语区域设置

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库并自行解决这个问题吗?

Hat*_*mam 5

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)

有两个注意事项:

  • Number.prototype.toLocaleString()

在此处输入图片说明

  • 此补丁已在PrimeFaces 5.0和4.0上测试并确认

这是github上的一个小例子和一个演示