h:绑定到String属性的inputText正在提交空string而不是null
我有一个Tomcat的JSF 2.0应用程序与许多<h:inputText>
字段在我的数据库中input数据。 有些字段不是必需的。
<h:inputText value="#{registerBean.user.phoneNumber}" id="phoneNumber"> <f:validateLength maximum="20" /> </h:inputText>
当用户离开这个字段为空时,JSF将设置空string""
而不是null
。
我怎样才能解决这个问题,而不用检查每个string
if (string.equals("")) { string = null; }
你可以configurationJSF 2.x来将web.xml
下面的context-param
(它有一个很长的名字,这也是我为什么不记得它)解释空的提交的值为空context-param
):
<context-param> <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> <param-value>true</param-value> </context-param>
对于参考和有兴趣的人来说,在JSF 1.2(因此不是1.1或更早版本,因为它的devise不可能有一个Converter
为java.lang.String
),这是可行的与下面的Converter
:
public class EmptyToNullStringConverter implements Converter { public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) { if (submittedValue == null || submittedValue.isEmpty()) { if (component instanceof EditableValueHolder) { ((EditableValueHolder) component).setSubmittedValue(null); } return null; } return submittedValue; } public String getAsString(FacesContext facesContext, UIComponent component, Object modelValue) { return (modelValue == null) ? "" : modelValue.toString(); } }
…需要在faces-config.xml
注册如下:
<converter> <converter-for-class>java.lang.String</converter-for-class> <converter-class>com.example.EmptyToNullStringConverter</converter-class> </converter>
如果你还没有使用Java 6,请用submittedValue.length() == 0
replacesubmittedValue.empty()
。
也可以看看
- 空弦疯狂
我希望这是正确的说法,我找不到解决问题的方法。
我已经添加context-param
到我的web.xml
但它没有结果。 我使用这两个context-param: javax.faces.PROJECT_STAGE =
的Tomcat 6.0.24服务器context-param: javax.faces.PROJECT_STAGE =
开发javax.faces.VALIDATE_EMPTY_FIELDS = true