我正在从JSF应用程序发送电子邮件。我需要它当我发送电子邮件时,显示一个FacesMessage确认操作并且浏览器重新加载到同一页面。我的代码显示了Face但不重新加载同一页面。
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>
请帮忙
答案 0 :(得分:4)
如果要在重定向中保留FacesMessages
,则应在keepMessages
to true
对象上设置Flash
。 Flash
范围是JSF2中引入的新范围。范围(以及随附的隐式EL对象flash
)用于短期存储“stuff”(意思是您想要保留的任何内容,短时间内)。
重定向前请尝试以下行:
FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
上面的行设置必要的标记以确保您的邮件被保留。
进一步阅读:
答案 1 :(得分:-1)
您无法将FacesMessage添加到下一个视图。重定向后,将使用新的FacesContext创建新视图,其中消息为空列表。如果您逐步遵循此机制,您可以看到无法执行此操作:
如果要在页面加载时添加消息,则应将其中的某些内容存储在仍然存在重定向的范围内(例如,flash,会话),并在新视图的bean的@PostConstruct方法中添加FacesMessage。