java - 如何在 session 范围 bean 中模拟请求范围行为?

标签 java jsf

在我的 jsf 应用程序中,我有一个用于发送邮件的按钮。每次点击它时,我都想显示邮件已发送或未发送的消息。

这是典型的请求范围功能。但问题是我现在有 1 个具有 session 范围的支持 bean。所有数据都在这个 bean 中。按钮的 action 属性引用的方法“发送”在这个 bean 中。

那么,出路在哪里呢?如果我应该再创建一个请求范围的 bean,那么我应该如何从我的 session bean 中引用它?

最佳答案

另一种方法,您可以使用 FacesMessage您可以在此处使用 FacesContext#addMessage() 添加到上下文中. FacesMessages 是基于请求的,并且可能比某些自定义消息传递方法更适合特定的功能要求。

下面是 bean 操作方法的示例:

public void sendMail() {
    FacesMessage message;
    try {
        Mailer.send(from, to, subject, message);
        message = new FacesMessage("Mail successfully sent!");
    } catch (MailException e) {
        message = new FacesMessage("Sending mail failed!");
        logger.error("Sending mail failed!", e); // Yes, you need to know about it as well! ;)
    }
    FacesContext.getCurrentInstance().addMessage(null, message);
}

对于 null clientId,消息变为“全局”,因此您可以使用以下构造来显示全局消息:

 <h:messages globalOnly="true" />

更新:要以不同的样式显示成功和错误消息,请使用 FacesMessage.Severity :

        message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Mail successfully sent!", null);
    } catch (MailException e) {
        message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Sending mail failed!", null);

.. 与 h:messages 中的 infoClass/infoStyleerrorClass/errorStyle 结合使用:

 <h:messages globalOnly="true" infoStyle="color:green" errorStyle="color:red" />

关于java - 如何在 session 范围 bean 中模拟请求范围行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176462/

相关文章:

java - Android 中网络服务器响应时间太长

Java - 如何为两个类设计一个通用方法

java - NoSuchElementException 和 Eclipse

java - 对于 FindBugs,jar305.jar 中的注释是否应该优于 annotation.jar 中的类似注释?

jsf - 通过 JSF 将 PDF 发送到浏览器

java - 用java编写文本文件

jsf - p :selectOneMenu value not set in bean

java - JSF 2.1 Web 应用程序上的 Spring Security

jsf - 检查 JSF 中表单部分的验证错误

java - 在 primefaces 的 InputNumber 上使用自定义类型的 NumberFormatException