java - PrimeFaces SelectOneMenu : Empty String is submitted as null

标签 java jsf primefaces

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为空而不是空字符串?如果我希望该值为空字符串,我该如何实现?

更新 “问题”出现在类com.sun.faces.renderkit.html_basic.MenuRenderer中:

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

最佳答案

您可以查看这个 JSF 2 - Bean Validation: validation failed -> empty values are replaced with last valid values from managed bean.

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

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

}

关于java - PrimeFaces SelectOneMenu : Empty String is submitted as null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815499/

相关文章:

jquery - 如何使用 jQuery 选择 JSF 组件?

jsf-2 - JSF2(和 Primefaces): Form for fileupload within another "normal" form, 如何做到这一点?

java - 《Effective Java》第 16 条(第 2 版)- 转发类仅用于允许重用吗?

java - 无法绑定(bind)到客户端中的广播地址 -- Java/Scala

java - 是否有用于实现面包屑导航的任何 JSF 组件?

javascript - 如何使用 JSF 打开弹出窗口而不被浏览器阻止

jsf - 具有PrettyFaces和JSF 2.2.3的Primefaces FileUpload

Java 类继承和阻塞父类(super class)方法

java - Android - 将图像从 URL 保存到 SD 卡

jsf - Servlet 过滤器和 Servlet 上下文监听器有什么区别?