【发布时间】:2011-09-12 08:08:55
【问题描述】:
我知道有很多关于在 JSF2 中将空字符串转换为 null 的帖子。通常的方法是在 web.xml 中添加以下内容。
<context-param>
<description>Does not appear to work</description>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
这似乎根本不起作用。然后我创建了一个自定义字符串转换器来测试它是否可行。我明确地将它作为转换器添加到我的 inputText 中(否则它不会在空白时触发)。
当 INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 true 时,转换器接收 null 并且输入文本的设置器仍接收“”。
当 INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 false(或被注释掉)时,转换器接收“”并且输入文本的设置器接收“”(即使在转换器返回 null 之后)。
@FacesConverter(forClass=java.lang.String.class, value="emptyStringToNull")
public class StringConverter implements Converter, Serializable {
private static final long serialVersionUID = -1121162636180944948L;
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
return value;
}
public String getAsString(FacesContext context, UIComponent component, Object object) {
if (object == null)
return null;
return object.toString();
}
}
我已经尝试(无济于事)在 getAsObject 中显式设置组件提交的值:
if (component instanceof EditableValueHolder)
((EditableValueHolder) component).setSubmittedValue(null);
我正在使用 JBoss6(实际上是 6.1 的快照)和 JSF 2.1.1。
【问题讨论】: