【问题标题】:PrimeFaces Spinner with German locale具有德国语言环境的 PrimeFaces Spinner
【发布时间】:2015-01-03 21:16:40
【问题描述】:

在一个 Java Web 项目中,我们使用 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>

这对于组件的绑定和呈现效果很好。在以下屏幕截图中,您会看到在“de_DE”语言环境中设置并正确格式化的浮点 2.6f(使用逗号而不是点作为小数分隔符)。

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

以前有没有人遇到过类似的问题?

我们可以在这里应用处理 p:spinner 组件的 JavaScript 的标准修复,还是我们真的需要深入研究 PrimeFaces JS 库并自行修复?

【问题讨论】:

标签: javascript jsf jsf-2 primefaces


【解决方案1】:

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 上经过测试和确认

这是githubDemo 的一个小例子

【讨论】:

  • 非常感谢!看起来正是我正在寻找的东西。明天将尝试升级到 PrimeFaces 5.0 并进行测试!
  • 我现在检查了这个东西。它的行为与预期和描述的一样。在我们的例子中,PrimeFaces 4.0
  • 不幸的是,它看起来不支持前缀和后缀属性。
  • 遗憾的是,即使在 PF 7.0.1 中,问题也没有得到解决 - 并且 github 上的修复不适用于 ajax 更新的元素。
  • @cljk 这个话题看起来像there is movement PF 7.1。
【解决方案2】:

好像 Primefaces Spinner 不支持 I18N。

自 2010 年以来已发布了一条要求支持语言环境的论坛消息,但没有任何答复:http://forum.primefaces.org/viewtopic.php?f=3&t=6398

一种可能的解决方案是使用 Primefaces 的扩展组件 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...

【讨论】:

  • 这个话题看起来像there is movement PF 7.1。
  • 或者我早就开始将我积极维护的项目切换到 ReactJS ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多