PrimeFaces SelectOneMenu:空字符串作为null提交



web.xml

[...]
<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>false</param-value>
</context-param>
[...]

view.xhtml

[...]
<p:selectOneMenu id="input1" value="#{myBean.value1}">
    <f:selectItem itemValue="" itemLabel="..." />
</p:selectOneMenu>
<p:inputText id="input2" value="#{myBean.value2}" />
[...]

MyBean.java

[...]
private String value1;
private String value2;
[...]

我将input2留空,提交表单并检查托管bean中的值:

  • value2是一个空字符串-正如预期的那样
  • value1为空

为什么value1为null而不是空字符串?如果我希望值是一个空字符串,我如何实现这一点?

更新"问题"在类别com.sun.faces.renderkit.html_basic.MenuRenderer:中

public Object getConvertedValue(...) {
    [...]
    if (RIConstants.NO_VALUE.equals(newValue)) {
        return null;
    }
    [...]
}

您可以检查这个JSF2-Bean验证:验证失败->空值被托管Bean的最后一个有效值替换。

如果您想将value1设置为空字符串,则可以使用此代码。

public Object getSubmittedValue() {
if (submittedValue == null && !isValid() && considerEmptyStringNull(FacesContext.getCurrentInstance())) {
    return "";
}
else {
    return submittedValue;
}

}

相关内容

  • 没有找到相关文章

最新更新