【问题标题】:validating decimals inputs in JSF验证 JSF 中的小数输入
【发布时间】:2011-06-27 20:33:12
【问题描述】:

我想将输入验证为整数。因此,任何带有小数的值都应该被过滤掉。但我不知道如何实现这一目标。我尝试了很多东西,但是使用下面的代码,如果输入为“61.2”,则将值转换为61,只是截断小数部分。但我想强制验证错误。我确信我可以在没有自定义验证器的情况下做到这一点。谢谢

<p:inputText size="5" value="#{bean.intValue}"  converter="#{Integer}">
    <f:convertNumber pattern="#0" integerOnly="true" maxFractionDigits="0"/>
</p:inputText>

【问题讨论】:

    标签: validation jsf


    【解决方案1】:

    这是不可能的,因为验证是在转换后运行的。您基本上需要将其绑定到 String 属性而不是 Integer 属性,以验证未转换的值。之后您需要在属性设置器或托管 bean 操作方法中对其进行转换。因此,如果您将其设为 String 属性,则可以使用 &lt;f:validateRegex&gt;

    <h:inputText value="#{bean.input}" validatorMessage="Please enter digits only">
        <f:validateRegex pattern="\d*" />
    </h:inputText>
    

    另外,与在 setter 或 action 方法中手动转换相比,IMO 更好,您可以引入一个扩展 JSF 标准 IntegerConverter 的自定义转换器,并在转换发生之前验证其中的模式。

    @FacesConverter("digitsOnly")
    public class DigitsOnlyConverter extends IntegerConverter {
    
        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
            if (!value.matches("\\d*")) {
                throw new ConverterException();
            }
    
            return super.getAsObject(context, component, value);
        }
    
    }
    

    <h:inputText value="#{bean.input}" converterMessage="Please enter digits only">
        <f:converter converterId="digitsOnly" />
    <h:inputText>
    

    【讨论】:

      【解决方案2】:

      放置 minFractionDigits = "0" and pattern=" # # #"

      【讨论】:

        猜你喜欢
        • 2012-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 2018-02-14
        • 2012-06-20
        相关资源
        最近更新 更多