0

我有一个表格,可以说 3 个字段:

  • 密码提示
  • 密码
  • 再次输入密码

我有一个包含这 3 个字段的 bean,并且我有一个类级别的验证器,它检查 bean 是否有匹配的passwordpassword again字段。想象一个非常相似的设置,就像它在https://github.com/AnghelLeonard/JSF-2.3/tree/master/JSF23ValidateWholeBeanExample

我面临的问题是,我输入 a password hint, apassword和 a non matching password again。在这种情况下,我清除了整个表单,因为在我看来,WholeBeanValidator 阻止 JSF 将任何值保存到模型中。相关代码的地方在com.sun.faces.ext.component.WholeBeanValidator.validate(FacesContext, UIValidateWholeBean, Object)

// Mark the components as invalid to prevent them from receiving
// values during updateModelValues
for (Entry<String, Map<String, Object>> validationCandidateEntry : validationCandidate.entrySet()) {
    invalidateComponent(validationCandidateEntry);
}

throw toThrow;

在这种情况下,我认为将模型值保留在字段中并获取全局错误消息会很好。但是,这些值不会进入 bean。我理解错了吗?你能帮我解决这个@BalusC :) 吗?

4

1 回答 1

0

小节JSF 2.3 中有什么新功能?- Arjan Tijms 的博客上的类级别 bean 验证引用:

在 JSF 中的想法是,如果验证失败,模型不会被触及。

这表明您所描述的问题确实按预期工作。

如果使用 ajax,也许您应该限制对消息和(如果使用 primefaces)标签的更新,而不是更新包括输入字段在内的整个表单。

于 2019-04-24T21:55:53.440 回答