h:绑定到String属性的inputText是提交空字符串而不是null

时间:2010-02-04 21:23:17

标签: string jsf tomcat null el

我在Tomcat上有一个JSF 2.0应用程序,有许多<h:inputText>字段用于在我的数据库中输入数据。某些字段不是必需的。

<h:inputText value="#{registerBean.user.phoneNumber}" id="phoneNumber">
    <f:validateLength maximum="20" />
</h:inputText>

当用户将此字段留空时,JSF会设置空字符串""而不是null

如何在不使用

检查每个字符串的情况下修复此行为
if (string.equals("")) { string = null; }

2 个答案:

答案 0 :(得分:49)

您可以配置JSF 2.x将空提交的值解释为空context-param中的web.xml(其名称非常长,这也是我无法回忆的原因)它;)):

<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或更旧,因为它的设计不可能Converterjava.lang.String)这可以解决以下问题{ {1}}:

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

如果您还没有使用Java 6,请将<converter> <converter-for-class>java.lang.String</converter-for-class> <converter-class>com.example.EmptyToNullStringConverter</converter-class> </converter> 替换为submittedValue.empty()

另见

答案 1 :(得分:0)

我希望这是说我找不到问题解决方案的正确方法。

我已将context-param添加到我的web.xml,但没有结果。我将Tomcat 6.0.24服务器与这两个context-param: javax.faces.PROJECT_STAGE =开发javax.faces.VALIDATE_EMPTY_FIELDS = true

一起使用