当使用分数或分隔符时,<f:convertnumber>需要抛出错误</f:convertnumber>

时间:2013-02-13 07:43:52

标签: jsf converter

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

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

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

我们正在使用JSF 1.2

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

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

)

1 个答案:

答案 0 :(得分: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" />