0

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2013-03-14T02:36:34.503 回答