gpt4 book ai didi

jsf - 在 JSF 转换/验证机制之外的操作方法中创建 FacesMessage?

转载 作者:行者123 更新时间:2023-12-04 16:19:53 25 4
gpt4 key购买 nike

我目前正在从核心 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 属性中,以便用户界面可以正确呈现。

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

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

    谢谢 !

    最佳答案

    您可以使用 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" />

    关于jsf - 在 JSF 转换/验证机制之外的操作方法中创建 FacesMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193784/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com