1

我有一个InputText连接到 int 类型的 Bean 属性的组件。但是,我被迫NumberConverter只使用

即使我指定integerOnly = true,它也会通过删除小数部分来接受双精度,并且在验证阶段不会引发错误

我的问题是,有没有办法NumberConverter抛出转换异常和错误消息(最好是客户端,我的意思是,当我退出该字段时)

我们正在使用 JSF 1.2

(实际上,NumberConverter 的 getAsObject() 有这段代码,当从 BigDecimal 转换为 Integer 时,当精度损失时应该抛出异常

GenericConverterFactory fac = GenericConverterFactory .getCurrentInstance();
      try
      {
        value = fac.convert(value, expectedType);
      }

)
4

1 回答 1

4

创建一个扩展默认值的自定义转换器,NumberConverter您可以在委托给之前检查字符串值NumberConverter,然后改用它。

public class MyNumberConverter extends NumberConverter {

    public MyNumberConverter() {
        setIntegerOnly(true);
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        if (submittedValue != null && !submittedValue.matches("[0-9]+")) {
            throw new ConverterException("Please enter digits only");
        }

        return super.getAsObject(context, component, submittedValue);
    }

}
<f:converter converterId="myNumberConverter" />
于 2013-02-13T11:38:49.663 回答