繁体   English   中英

在JSF转换/验证机制之外的action方法中创建FacesMessage?

[英]Creating FacesMessage in action method outside JSF conversion/validation mechanism?

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

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

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

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

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

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

谢谢 !

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

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

将客户端ID参数设置为null ,它将成为全局消息。 您可以使用<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" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM