21

我在 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; }
4

2 回答 2

50

context-param您可以配置 JSF 2.x 以通过以下方式将空提交的值解释为 null 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 或更早版本,因为设计上不可能有Converterfor 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.empty()submittedValue.length() == 0.

也可以看看

于 2010-02-04T22:58:28.863 回答
0

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

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

于 2010-02-08T11:00:02.070 回答