【问题标题】:isLocalValueSet of a UIInput always returns true in custom validatorUIInput 的 isLocalValueSet 在自定义验证器中始终返回 true
【发布时间】:2013-03-02 02:24:11
【问题描述】:

我编写了一个自定义验证器来验证所有表单字段。我正在使用 Incefaces 3.2 和 JSF 2.0。我注意到整数类型的 UIInput 上有多个问题。如果我没有在表单上输入任何数据并单击提交,我可以使用 myUIInput.getValue() 检查自定义验证器中的字段值并触发所需的验证。

当我在字段中输入一些值并提交时,我在我的自定义验证器中使用 getSubmittedValue() 来验证它。到目前为止,一切都很好。当我从 UI 中删除字段中的值(将其清空)并​​提交时,getValue() 仍保留旧值。 isLocalValueSet() 总是返回 null。

我在第一次触发验证后尝试重置以下内容。它也没有帮助。

        myInput.setValue(null);
        myInput.setSubmittedValue(null);
        myInput.setLocalValueSet(false);

如何将我的字段状态重置为初始值?触发验证后如何正确设置 isLocalValueSet() ?提前致谢。

【问题讨论】:

    标签: jsf jsf-2 icefaces


    【解决方案1】:

    JSF 组件按照它们在组件树中出现的顺序进行验证。鉴于您正在使用getSubmittedValue(),这只能意味着您的自定义验证器在任何组件被处理之前被触发。也许您已将验证器附加到表单开头的隐藏输入中。

    因此,这意味着当您的自定义验证器完成时,JSF 将继续处理组件树中的所有后续组件,从而以“通常的方式”对每个单独的组件重做整个验证过程,从而覆盖您操作的组件状态从您的自定义验证器开始。

    我不确定具体的功能要求是什么以及为什么需要这样处理它,这有点臭,但理论上你可以通过在所有组件之后触发自定义验证器来解决它被处理。并处理getValue() 而不是getSubmittedValue()。同样,具体的功能要求太不清楚,无法提出任何设计改进。

    【讨论】:

    • 感谢 BalusC。我们在我们的 jsf2、Icefaces 3 应用程序的某些形式上使用 JSR 303 bean 验证。我们在控制验证顺序时遇到了问题。我想删除所有验证,但请求对象(dto)与项目的其他类紧密耦合。我们即将完成项目,在没有 bean 验证的情况下创建新的 dto 为时已晚。所以,我写了一个自定义验证器,例如.
    • 每次我提交表单时都会触发这个验证器。我的客户添加了最后一分钟的要求,如果未输入任何值,则将整数字段显示为空白。如果验证(必需或格式)失败,则必须将其设置为空白。由于某种原因,getValue() 和 getSubmittedValue() 没有为整数类型字段正确更新。我对字符串或日期字段没有任何问题。作为一种解决方法,我在 UI 上使用了一个字符串,然后如果它是一个有效的 int 值,则将其改回整数。添加转换器的路线我没有探索。
    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 2014-02-10
    • 2018-06-16
    • 2019-03-07
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多