我使用<f:convertNumber>
标签转换成十进制输入。
<f:convertNumber minFractionDigits="2" />
但它接受尾随alphabatic字符。 例如,如果我输入12345.1234AAA
其转换为12345.123
。 我想它扔在那,而不是微调的字母字符转换错误。 我怎样才能做到这一点?
我使用<f:convertNumber>
标签转换成十进制输入。
<f:convertNumber minFractionDigits="2" />
但它接受尾随alphabatic字符。 例如,如果我输入12345.1234AAA
其转换为12345.123
。 我想它扔在那,而不是微调的字母字符转换错误。 我怎样才能做到这一点?
这仅仅是标准行为的java.text.NumberFormat
13759 <f:convertNumber>
它修剪第一不被允许字符之后的所有条目(例如字母或十进制分隔别人比在输入区域中定义的那些)。 转换只有在有问题的字符开头失败。
我真的不喜欢这种行为,因为用户可能不会注意到他的错误类型值输了个精光,导致意外和(更糟糕的)被忽视的自动校正到一个错误的值。
有趣的是,具体的数字转换器的行为不同。 使用<f:converter converterId="javax.faces.Double" />
不会自动处理非数字输入,而是将失败的转换。 但是,该标志不具有convertNumber的附加属性,诸如minFractionDigits或货币符号。
一种不同的方法是写描述它扩展了标准的转换自己的自定义转换器在这个答案 。 然后,您可以检查该值的字符,直接中止进一步处理(抛出根据转换的异常)如果您发现任何。 如果该值已经是免费的字符,你可以叫你从导出转换器的标准行为。
两种方法的缺点是,你失去的附加功能convertNumber
。 您没有属性,如minFractionDigits
或currencySymbol
上<f:converter>
,所以如果你需要这个,你不得不另谋出路的参数来传递。 我们的实现不需要任何的这些,所以我没有看过这个任何进一步的(我们去的方法A),但这个答案提供了一个方法来做到这一点。