我编写了一个自定义验证程序来验证所有表单字段。我使用的是Incefaces 3.2和JSF 2.0。我注意到整数类型的UIInput上存在多个问题。如果我没有在表单上输入任何数据并单击提交,我可以使用myUIInput.getValue()检查自定义验证器中的字段值并激活所需的验证。
当我在字段中输入一些值并提交时,我在自定义验证器中使用getSubmittedValue()来验证它。到现在为止还挺好。当我从UI中删除字段中的值(清空它)并提交它时,getValue()仍然保留旧值。 isLocalValueSet()始终返回null。
我在第一次触发验证后尝试重置以下内容。它也没有帮助。
myInput.setValue(null);
myInput.setSubmittedValue(null);
myInput.setLocalValueSet(false);
如何将字段状态重置为初始值?如何在激活验证后正确设置isLocalValueSet()?提前致谢。
答案 0 :(得分:1)
JSF组件按它们在组件树中出现的顺序进行验证。鉴于您正在使用getSubmittedValue()
,这只能意味着您的自定义验证程序在处理任何组件之前被解雇。也许您已经将验证器附加到表单开头的隐藏输入中。
这意味着当您的自定义验证器完成时,JSF将继续处理组件树中的所有后续组件,从而以“通常的方式”对每个组件重做整个验证过程,从而覆盖您操作的组件的状态来自您的自定义验证器。
我不确定具体的功能要求是什么以及为什么你需要这样做,这有点臭,但理论上你可以通过在所有组件之后触发自定义验证器来解决它已被处理。处理getValue()
而不是getSubmittedValue()
。同样,具体的功能要求太不明确,无法提出任何设计改进。