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

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

回答:

您可以配置JSF 2.x的解释由以下空提交的数据为空context-

paramweb.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

也可以看看

  • balusc.omnifaces

以上是 h:inputText绑定到String属性正在提交空字符串而不是null 的全部内容, 来源链接: utcz.com/qa/398451.html

回到顶部