2011-04-28 46 views
0

JSF验证假设我们有一个表格,其中一些字段需要,有些不是(可选)。
现在当我们说字段是必需的,验证器将只验证输入的长度,但不会首先输入修剪然后验证。为必填项

要解决这个问题,我写了一个JavaScript函数调用窗体提交。 但它也会验证可选字段。

将转换器添加到所有输入字段并不高雅。
也是他们的任何方式我可以覆盖需要验证过程。
或者我该如何识别javascript中的可选输入字段。

那么这样做的正确方法是什么?使用JSF 1.2

回答

1

如果您在<converter-for-class>注册的转换器,而不是<converter-id>

那么它会在所有的值类型应用。

<converter> 
    <converter-for-class>java.lang.String</converter-for-class> 
    <converter-class>com.example.EmptyToNullConverter</converter-class> 
</converter> 

public class EmptyToNullConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { 
     if (value == null || value.trim().length() == 0) { 
      if (component instanceof EditableValueHolder) { 
       ((EditableValueHolder) component).setSubmittedValue(null); 
      } 
      return null; 
     } 
     return value; 
    } 

    @Override 
    public String getAsString(FacesContext facesContext, UIComponent component, Object value) { 
     return value == null ? null : value.toString(); 
    } 

} 

无需注册它的每个组件上。