gpt4 book ai didi

jsf - :convertNumber doesn't throw conversion error on trailing alphabetic characters in decimal

转载 作者:行者123 更新时间:2023-12-02 20:04:37 26 4
gpt4 key购买 nike

我正在使用<f:convertNumber>标签转换十进制输入。

<f:convertNumber minFractionDigits="2" />

但它接受尾随字母字符。例如,如果我输入 12345.1234AAA它转换为12345.123 。我希望它抛出一个转换错误,而不是修剪字母字符。我怎样才能实现这个目标?

最佳答案

这就是standard behavior java.text.NumberFormat <f:convertNumber> 使用:它会修剪第一个不允许的字符之后的所有条目(例如,除输入区域设置中定义的字母或小数分隔符之外的字母或小数分隔符)。仅当有问题的字符位于开头时,转换才会失败。

我真的不喜欢这种行为,因为用户可能没有注意到他输入错误的值被修剪,从而导致意外且(更糟糕)未被注意到的自动更正为错误的值。

有趣的是,特定的数字转换器的行为有所不同。使用<f:converter converterId="javax.faces.Double" />不会自动处理非数字输入,而是转换失败。但是,该标记不具有convertNumber 的附加属性,例如minFractionDigits 或货币符号。

另一种方法是编写您自己的自定义转换器,该转换器扩展了标准转换器,如in this answer所述。 。然后,您可以检查字符的值,如果发现任何字符,则直接中止进一步处理(抛出相应的转换异常)。如果该值已经是无字符的,您可以调用派生的转换器的标准行为。

这两种方法的缺点是您失去了convertNumber的附加功能。 。您没有诸如 minFractionDigits 之类的属性或currencySymbol<f:converter> ,所以如果你需要这个,你必须找到另一种方法来传递参数。我们的实现不需要任何这些,所以我没有进一步研究这个(我们采用了方法 A),但是 this answer提出了一种这样做的方法。

关于jsf - :convertNumber doesn't throw conversion error on trailing alphabetic characters in decimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11253368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com