Jsf 2 javax.faces.exploration_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为TRUE时出现必填字段问题
在MyFaces和Mojarra 2.1中都存在一个缺陷,即当Jsf 2 javax.faces.exploration_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为TRUE时出现必填字段问题,jsf-2,Jsf 2,在MyFaces和Mojarra 2.1中都存在一个缺陷,即当javax.faces.exploration\u EMPTY\u STRING\u SUBMITTED\u VALUES\u AS\u NULL设置为true,任何标记为必需并在模型中预先填充的字段,当空白和提交时,将重新显示其原始非空白值,而不是保留空白 情况是: 用户加载带有单个必填字段的页面,该字段由模型中的现有数据填充 用户清除页面上的字段并提交表单 正如预期的那样,验证失败,并向用户显示一条错误消息,用户必须填写该消息 必
javax.faces.exploration\u EMPTY\u STRING\u SUBMITTED\u VALUES\u AS\u NULL
设置为true
,任何标记为必需并在模型中预先填充的字段,当空白和提交时,将重新显示其原始非空白值,而不是保留空白
情况是:
javax.faces。将\u空\u字符串\u提交的\u值\u解释为\u空
到假
。设置为false
可提供所需的行为,即当页面重新显示时,该字段保持空白,并显示所需的字段错误消息
Mojarra记录了一个缺陷(http://java.net/jira/browse/JAVASERVERFACES-2375)还有我的脸(https://issues.apache.org/jira/browse/MYFACES-3525)但在6周内没有取得任何进展
请注意,Mojarra似乎在6个月内报告了类似的问题
但迄今尚未取得任何进展
有没有人知道这样一种解决方法,我们可以在这里保存
javax.faces。将\u EMPTY\u STRING\u SUBMITTED\u VALUES\u解释为\u NULL
设置为true而不是false,但不会遇到此必填字段可用性问题 中详细解释了此问题。说到这里,在Mojarra,它是由HtmlBasicRenderer#getCurrentValue()
中的一个bug或至少一个疏忽引起的,并被报告为
同时,解决此问题的最简单方法是,在考虑第三方组件库及其自己的渲染器(如PrimeFaces)的同时,将UIInput
的源文件直接复制到项目的源文件夹中,然后相应地编辑getSubmittedValue()
:
public Object getSubmittedValue() {
if (submittedValue == null && !isValid() && considerEmptyStringNull(FacesContext.getCurrentInstance())) {
return "";
}
else {
return submittedValue;
}
}
它将在
/WEB-INF/classes
中结束,这将在类加载中优先于JSF JAR文件中的类加载。诚然,这有点笨拙,但它比重建JSF JAR文件或覆盖每个输入渲染器要轻松得多。这是否也应该修复它?我知道这是固定的,但似乎没有固定。你知道PrimeFaces的固定方法吗?PrimeFaces的工作是在ComponentUtils#getValueToRender()
方法中完成的。再想一想,如果UIInput#getSubmittedValue()可能更容易当isValid()
为false
时,
改为返回空字符串,而不是null
。谢谢--是否要更新以包含此修复程序而不是原始修复程序?快速提问——你有信心这个新补丁不会破坏其他任何东西吗?这是在PrimeFaces 3.5中通过改进补丁修复的。