【问题标题】:Creating FacesMessage in action method outside JSF conversion/validation mechanism?在 JSF 转换/验证机制之外的操作方法中创建 FacesMessage?
【发布时间】:2011-05-10 18:38:26
【问题描述】:

我目前正在从 core jsf 2.0 book + glassfish + cdi 学习 jsf 2.0。

我想问一个关于使用 bean-validation-framework 处理 jsf 页面或托管/命名 bean 中未定义的验证的问题。 我脑子里有这些层次:

  • 1) ui 层/jsf 页面
  • 1.5) jsf 托管/命名 bean(我使用 1.5,因为我认为它仍然与 jsf 层紧密耦合,就像支持 bean)
  • 2) 业务逻辑层(从 jsf 的东西/导入中清除,只做纯业务逻辑的东西)
  • 3) 持久层

我想象 1.5 层(jsf bean)初始化和调用 2 层(业务逻辑对象),在调用业务方法时提供参数,获取结果,将结果填充到 jsf bean 属性中,以便 ui 可以正确呈现。

令我好奇的是,第 2 层(业务逻辑对象)可以对提供的参数进行验证,或验证数据等,并可能引发异常或错误对象。

我认为我可以处理异常并在 1.5 层(jsf 托管 bean)中获取错误对象,但是我应该如何在呈现的页面中显示错误?我似乎无法从我正在阅读的书中找到它,但我希望有一种方法可以创建一个全局错误消息并以某种方式将其注入某个地方以便它被标签呈现?

谢谢!

【问题讨论】:

    标签: jsf jsf-2 action message


    【解决方案1】:

    您可以使用FacesContext#addMessage() 以编程方式将FacesMessage 添加到上下文中。

    FacesContext facesContext = FacesContext.getCurrentInstance();
    FacesMessage facesMessage = new FacesMessage("This is a message");
    facesContext.addMessage(null, facesMessage);
    

    当您使用null 设置客户端ID 参数时,它将成为一个全局 消息。您可以使用<h:messages /> 显示和过滤它们

    <h:messages globalOnly="true" />
    

    globalOnly="true" 将仅显示带有 null 客户端 ID 的消息。

    不过,您也可以指定特定的客户端 ID。

    facesContext.addMessage("formid:inputid", facesMessage);
    

    这个最终会在

    <h:form id="formid">
        <h:inputText id="inputid" />
        <h:message for="inputid" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2018-05-20
      • 1970-01-01
      相关资源
      最近更新 更多