JSF 2.3全bean验证会抛弃所有字段。有意吗?我用错了吗?

问题描述 投票:0回答:1

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

  • 密码提示
  • 密码
  • 密码再次

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

我面临的问题是,我输入了password hintpassword和不匹配的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 :)吗?

java jsf bean-validation jsf-2.3
1个回答
0
投票

关于Arjan Tijms博客的部分What's new in JSF 2.3? - Class level bean validation引用:

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

这表明你所描述的问题确实可以按预期运作。

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

© www.soinside.com 2019 - 2024. All rights reserved.