java - JSF 2.3 整个 bean 验证会丢弃所有字段。是故意的吗?难道是我用错了什么东西?

标签 java jsf bean-validation jsf-2.3

我有一个包含 3 个字段的表单:

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

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

我面临的问题是,我输入了密码提示密码和再次输入的密码不匹配。在这种情况下,我清除了整个表单,因为在我看来,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 :)吗?

最佳答案

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

In JSF the idea is that the model is not touched if validation fails.

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

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

关于java - JSF 2.3 整个 bean 验证会丢弃所有字段。是故意的吗?难道是我用错了什么东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55828074/

相关文章:

java - 动态用户界面 :include

jsf - 写入 h :inputText in h:dataTable 中的 map 属性

spring - 使用 Spring 验证框架验证请求 header

java - 使用 JUnit 进行测试时,Spring MVC 中的 Hibernate validator 不工作

java - 将图像作为多部分表单数据上传时对 FormDataContentDisposition 进行自定义验证

java - 我可以在 Sonar 中使用 EclEmma 覆盖报告吗?

java - Android - 如何捕获RTP数据包

jsf - 扩展Richfaces组件-例如为特定的实现定制Datatable组件

java - java中套接字编程中的Connection Refused错误

java - 使用 Log4j 创建 Uber/Fat Jars