Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 javax.faces.exploration_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为TRUE时出现必填字段问题_Jsf 2 - Fatal编程技术网

Jsf 2 javax.faces.exploration_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为TRUE时出现必填字段问题

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,任何标记为必需并在模型中预先填充的字段,当空白和提交时,将重新显示其原始非空白值,而不是保留空白 情况是: 用户加载带有单个必填字段的页面,该字段由模型中的现有数据填充 用户清除页面上的字段并提交表单 正如预期的那样,验证失败,并向用户显示一条错误消息,用户必须填写该消息 必

在MyFaces和Mojarra 2.1中都存在一个缺陷,即当
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中通过改进补丁修复的。