javascript - 具有德语语言环境的 PrimeFaces Spinner

标签 javascript jsf jsf-2 primefaces

在 Java 网络项目中,我们使用 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>

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

Screenshot after rendering the page

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

Screenshot after pressing the "up" butotn once.

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

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

最佳答案

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 上进行测试和确认

这是关于 github 的一个小例子和一个 Demo

关于javascript - 具有德语语言环境的 PrimeFaces Spinner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795175/

相关文章:

java - 每个请求的页面都会出现 MalformedInputException

jsf - 托管 bean 中的回滚事务

java - JSF2.1 - 在 selectoneradio 中使用 AJAX

javascript - 回显/输出添加到同一页面上的输入字段的信息

Javascript正则表达式数值范围

java - 如何阻止在非渲染 JSF 组件中计算 EL 表达式?

javascript - 将 JSF(primefaces) 托管 bean 变量传递给 javascript 函数

javascript - 如何水平和垂直居中这四个 div 内容?

javascript - 如何检查一个字符串是否完全由相同的子字符串组成?

java - 渲染 <h :panelGroup> by ajax in jsf