我想将输入验证为整数。因此,应过滤具有小数部分的任何值。但我不知道如何实现这一目标。我尝试了很多东西,但是使用下面的代码,如果输入是“61.2”,则值将转换为61,只是截断小数部分。但我想强制验证错误。我相信没有自定义验证器我就能做到。感谢
<p:inputText size="5" value="#{bean.intValue}" converter="#{Integer}">
<f:convertNumber pattern="#0" integerOnly="true" maxFractionDigits="0"/>
</p:inputText>
答案 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 =“###”