【问题标题】:Primefaces Input with BigDecimalConverter ignores empty String使用 BigDecimalConverter 的 Primefaces 输入忽略空字符串
【发布时间】:2013-11-26 10:15:51
【问题描述】:

设置: Primefaces 3.4.2,JSF2

我有一个包含 4 个输入字段的表单,当触发 onblur 时会发布数据。

说明 我将值放入所有 4 个输入字段中,并且按应有的方式工作。然后我开始一一删除这些值。对于所有具有 BigDecimalConverters 的字段,我无法删除这些值,只要我离开该字段并开始在下一个字段中删除,值就会返回到该字段。

我在 IE 和 Chrome 的开发人员工具中使用了网络选项卡,我可以看到帖子发送了空值,然后它得到一个回复​​,说该字段中应该有不同的数字。

有谁知道什么会导致这种行为?

【问题讨论】:

  • 你能提供你的代码片段吗?相关的视图页面和托管 bean 代码,没有它就不可能提供一个像样的答案。
  • 恐怕我做不到。它是一个庞大的遗留系统的一部分,它不喜欢做它应该做的事情,所以它在服务器端用 java 代码生成几乎所有组件。但是我可以看到输入之间唯一不同的是 IntegerConverter 和 BigDecimalConverter 所以我希望有人遇到过类似的问题。
  • 号码是198.23吗?

标签: java jsf primefaces


【解决方案1】:

您遇到的问题归结为以下几点:

BigDecimal bg = new BigDecimal("");

上面的行会抛出一个java.lang.NumberFormatException,这又会导致一个转换错误。这就是由于字段验证/转换失败而保留字段值的原因。

根本原因是空白,默认情况下不会作为null提交给服务器。它们作为空字符串提交。可以通过在 web.xml 中将上下文参数 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 true 来自定义此行为。这将导致空字段以null 发送,并且不会触发转换错误。

相关:

【讨论】:

  • 这正是我在(众多)环境中解决它的方法。如果它是当面提交空字符串作为有效值,这将解决它。如果没有,请显示一些代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多