当前位置: 首页 > 面试题库 >

在JSF中显示FacesMessage并重新加载页面

龚永新
2023-03-14
问题内容

我正在从JSF应用程序发送电子邮件。我需要它,以便当我发送电子邮件时,显示FacesMessage确认操作,然后浏览器重新加载到同一页面。我的代码显示了面孔,但没有重新加载同一页面。

public String sendEmail(){
//Email Sending Code.....
 Transport.send(message);

            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Successfull\n", "You have successfully sent an e-mail to : " + e_mail + ". \n Thank You"));

            return "Email?redirect-true";
}

这是我尝试过的,此代码重新加载页面,但未显示FacesMessage。

public String sendEmail(){
    //Email Sending Code.....
     Transport.send(message);

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                        "Successfull\n", "You have successfully sent an e-mail to : " + e_mail + ". \n Thank You"));
                 FacesContext context = FacesContext.getCurrentInstance();
            HttpServletRequest origRequest = (HttpServletRequest) context.getExternalContext().getRequest();
            String contextPath = origRequest.getContextPath();
            FacesContext.getCurrentInstance().getExternalContext().redirect(contextPath + "/faces/Email.xhtml");
                return "Email?redirect-true";
    }

这是我发送电子邮件页面的代码:

    <h:form >
            <p:growl id="growl" showDetail="true"/>
            <p:panel header="Send Email" style=" width: 70%">
                <h:panelGrid columns="2"> 
                    <h:outputLabel value="E Mail Address: " />
                    <h:inputText value="#{mailing.e_mail}" style="width: 400px"/>

                    <h:outputText value="Subject: " /> 
                    <h:inputText value="#{mailing.subject}" style="width: 400px"/>

                    <h:outputText value="Message: " />
                    <h:inputTextarea value="#{mailing.mess}" style="height: 300px;width: 700px"/>
                    <h:panelGroup/>
                    <p:commandButton
                        value="Send Mail "
                        action="#{mailing.sendEmail()}"
                        ajax="false"/>
                </h:panelGrid> 
            </p:panel>
        </h:form>

请帮忙


问题答案:

如果要跨重定向保留,则应在对象上设置keepMessagestrue。该范围是JSF2推出了新的范围。范围(和随附的隐式EL对象)旨在用于
短期
存储“东西”(意味着您想要保留的任何东西,在短时间内)。FlashFacesMessages``Flash``flash

重定向之前,请尝试以下行:

   FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);

上面的行设置了必要的标志,以确保保留您的消息。

进一步阅读:

  • Max Katz在Flash上​​的JSF博客


 类似资料:
  • 我在eclipse中有一个使用jsf的动态web应用程序。我用“New java server faces(jsf)page(xhtml)”模板创建了一个jsp页面,希望只显示一个h:inputText,但当我在tomcat中运行应用程序时,inputText没有显示出来。 有什么问题?

  • 我想重新加载页面。我该怎么做?

  • 我使用这个众所周知的模式来显示服务工作者更新准备好安装时的通知(此代码进入网页,当然不是服务工作者代码): 当然,该代码是有效的,因为如果准备好安装新版本的服务辅助角色,它会在网页上显示通知。 问题是,如果在该点重新加载页面,则不再显示通知,因为如果安装了新的服务工作人员并等待激活,则不再触发事件。 因此,通知只出现一次,当安装了新的服务工作人员并等待激活并开始控制页面时,但是一旦页面重新加载,通

  • 问题内容: 我有一个带有php include的Div Tag,该div用来填充该信息,我想要做的是使它每隔15秒调用一次,以便它可以在那里更新信息,而不必重新加载整个网页。我试图用JavaScript / jQuery做到这一点,但似乎无法正常工作 这是我在搜索一些内容后所拥有的,然后发生的是,它加载了Small.php,但不会每15秒刷新一次或更新信息。 请帮忙! 我应该添加所有应显示的php

  • 问题内容: 我做了一些Angular路线,如下面的代码所示。 在我将基本href设置为“ /”后,它可以正常工作,但它接受了带有“ / portfolio”的href的锚点,但是当我转到“ http://url.com/portfiolo ”或尝试重新加载页面时当我在投资组合路线上时,它将给我服务器错误。我可以为此做些什么吗? 提前致谢。 问题答案: 我自己解决了..您始终需要在项目的根目录中创建

  • 我正在尝试在angularjs中注销后重新加载页面。我正在使用ui路由。只有状态正在更改,但不会删除缓存。我尝试了以下场景。使用$窗口时。地方重新加载,浏览器警告警报(是否要重新加载)即将出现。但我不需要警惕。 $状态。go(登录) $窗口。地方重新加载(true) $位置。路径(“/登录名”) 任何人都可以建议如何在更改angularjs中的状态时删除缓存。