PrimeFaces Spinner具有德语区域设置

时间:2014-11-07 06:10:57

标签: javascript jsf jsf-2 primefaces

在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”语言环境中正确格式化(使用逗号而不是点作为小数点分隔符)。

Screenshot after rendering the page

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

Screenshot after pressing the "up" butotn once.

有没有其他人有这样的类似问题?

对于我们可以在这里应用的p:spinner组件的JavaScript是否有标准修复,或者我们真的需要深入了解PrimeFaces JS库并自行解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

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()

enter image description here

  • 此补丁在PrimeFaces 5.0和4.0上进行测试和确认

以下是githubDemo

的小例子

答案 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 ......