gpt4 book ai didi

jsf-2 - javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 TRUE 时的必填字段问题

转载 作者:行者123 更新时间:2023-12-04 14:48:28 30 4
gpt4 key购买 nike

在 MyFaces 和 Mojarra 2.1 中,都存在一个缺陷,当 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为 true , 任何标记为必填字段并在模型中预填充的字段,当消隐和提交时,将以其原始非消隐值重新显示,而不是留空。

场景是:

  • 用户加载具有单个必填字段的页面,该字段填充有模型中的现有数据
  • 用户清除页面上的字段并提交表单
  • 验证失败,正如预期的那样,并向用户显示一条错误消息,他们必须填写
    必填项目。

  • 问题在于,该字段应该显示用户提交的内容——即他们为该字段提交了一个空白值——而是用模型中的原始值填充。唯一的解决方法是设置 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULLfalse .设置为 false提供所需的行为,即当页面重新显示所需的字段错误消息时,该字段保持空白。

    Mojarra (http://java.net/jira/browse/JAVASERVERFACES-2375) 和 MyFaces (https://issues.apache.org/jira/browse/MYFACES-3525) 记录了一个缺陷,但没有取得任何进展在 6 周内。

    Note that it appears Mojarra had a similar issue reported over 6 mos ago yet no progress has been made.



    有没有人知道我们可以保留的解决方法 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为 true 而不是 false 并且还没有遇到这个必需的字段可用性问题?

    最佳答案

    这个问题在JSF 2 - Bean Validation: validation failed -> empty values are replaced with last valid values from managed bean中有详细解释.就这一点而言,在 Mojarra 中,它是由 HtmlBasicRenderer#getCurrentValue() 中的错误或至少是疏忽引起的。并已报告为 issue 2266 .
    同时,解决此问题的最简单方法,同时考虑到具有自己的渲染器(如 PrimeFaces)的 3rd 方组件库,是复制 UIInput 的源文件。直接在项目的源文件夹中,然后编辑 getSubmittedValue()因此:

    public Object getSubmittedValue() {
    if (submittedValue == null && !isValid() && considerEmptyStringNull(FacesContext.getCurrentInstance())) {
    return "";
    }
    else {
    return submittedValue;
    }
    }
    它将在 /WEB-INF/classes 结束这将优先于 JSF JAR 文件中的类加载。诚然,这有点笨拙,但它不如重建 JSF JAR 文件或覆盖每个输入渲染器那么痛苦。

    关于jsf-2 - javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 TRUE 时的必填字段问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692404/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com