【问题标题】:How are bean validation constraint violation errors caught/shown by JSF?JSF 如何捕获/显示 bean 验证约束违规错误?
【发布时间】:2011-09-16 20:55:36
【问题描述】:

当我尝试提交引用实体的 JSF 表单时,其属性上带有 bean 验证注释,然后 JSF 在违反 bean 验证约束时显示 bean 验证错误。

我想知道:

  • 实体何时验证?
  • 它如何处理/链接 bean 验证错误到视图?

【问题讨论】:

    标签: jsf error-handling bean-validation


    【解决方案1】:

    实体何时验证?

    在 JSF 验证阶段,即 JSF 生命周期的第三阶段,在收集和应用提交的值(第二阶段)和更新模型值(第四阶段)之间。


    它如何处理/链接 bean 验证错误到视图?

    任何验证器(和转换器)异常消息都被转换/存储在 FacesMessage 中,FacesContext#addMessage() 添加到 FacesContext 中。所有这些消息依次单独显示在绑定到特定输入组件的<h:message> 组件中

    <input id="foo" value="#{bean.foo}" />
    <h:message for="foo" />
    
    <input id="bar" value="#{bean.bar}" />
    <h:message for="bar" />
    

    或全部放在一个通用的&lt;h:messages/&gt; 组件中

    <h:messages />
    

    所有缺少的验证消息都将记录到标准输出中,或者当您在开发项目阶段运行时,在开发阶段警告消息会自动添加到视图中。

    【讨论】:

      【解决方案2】:

      验证发生在请求值提交到服务器之后但在它们应用到模型 Bean 之前。这确保了模型的完整性。在此过程中有一个数据类型转换,如果 JSF 标准验证器和转换器不足以验证您的数据类型,您可以插入自己的插件。本教程描述了 JSF 中可用的 standard validators and converters

      如需编写自定义验证器,请参阅O'Reilly's book on JSF

      【讨论】:

      • 请注意,OP 正在谈论 JSR303 Bean 验证(那些注释,如 @NotNull@Pattern@Min@Max 等),它也有自己的创建自定义验证器的方法.这与 JSF 自己的验证器无关。
      猜你喜欢
      • 2013-11-27
      • 2023-03-30
      • 2012-07-25
      • 2011-08-30
      • 2023-01-22
      • 2019-09-03
      • 1970-01-01
      • 2012-05-17
      • 2015-11-30
      相关资源
      最近更新 更多