在MyFaces和Mojarra 2.1中,存在一个缺陷,其中javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为何时true,标记为必需并在模型中预先填充的任何字段,在消隐和提交时都会重新显示其原始非消隐值而不是空白.
场景是:
问题是该字段应显示用户提交的内容 - 即他们为字段提交的空白值 - 而是填充模型中的原始值.唯一的解决方法是设置javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL为false.设置为false提供所需的行为,当使用必填字段错误消息重新显示页面时,字段保持消隐.
Mojarra(http://java.net/jira/browse/JAVASERVERFACES-2375)和MyFaces(https://issues.apache.org/jira/browse/MYFACES-3525)记录了一个缺陷,但没有取得任何进展在6周内.
请注意,似乎Mojarra在6个月前报道了一个类似的问题,但尚未取得任何进展.
有没有人知道这方面的解决方法,我们可以javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为true而不是false,但是没有遇到这个必需的字段可用性问题?
在JSF 2 - Bean Validation中详细解释了这个问题:验证失败 - >空值被替换为来自托管bean的最后一个有效值.到目前为止,在Mojarra中,它是由一个错误或至少是一个疏忽引起的,HtmlBasicRenderer#getCurrentValue()并且已被报告为问题2262.
同时,解决此问题的最简单方法是将第三方组件库与PrimeFaces等自己的渲染器一起考虑,将源文件UIInput直接复制到项目的源文件夹中,然后相应地编辑getSubmittedValue():
public Object getSubmittedValue() {
if (submittedValue == null && !isValid() && considerEmptyStringNull(FacesContext.getCurrentInstance())) {
return "";
}
else {
return submittedValue;
}
}
Run Code Online (Sandbox Code Playgroud)
它将最终进入,/WEB-INF/classes并且这将在JSF JAR文件中的类加载之上获得优先级.不可否认,它有点笨拙,但它比重建JSF JAR文件或覆盖每个输入渲染器要痛苦得多.
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |