验证JSF中的小数输入

时间:2011-06-27 20:33:13

标签: validation jsf

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

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

2 个答案:

答案 0 :(得分:12)

由于验证在转换后运行,因此无法实现。您基本上需要将其绑定到String属性而不是Integer属性,以便验证未转换的值。您需要在属性设置器或托管bean操作方法中转换它。因此,如果您将其设为String属性,则可以使用<f:validateRegex>

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

或者,IMO比在setter或action方法中手动转换它更好,你可以引入一个自定义转换器,扩展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>

答案 1 :(得分:0)

放置minFractionDigits =“0”和pattern =“###”