Redirect 显示成功消息,然后在超时后使用PageFlow重定向到另一个页面
如何显示成功消息,然后在超时(例如5秒)后将用户重定向到另一个页面 我需要一个成功登录后登录页面这一点。我尝试了以下操作,可以看到登录失败时的警告消息,但无法看到登录成功时的成功消息。它立即显示目标页面Redirect 显示成功消息,然后在超时后使用PageFlow重定向到另一个页面,redirect,jsf-2,primefaces,timeout,seam,Redirect,Jsf 2,Primefaces,Timeout,Seam,如何显示成功消息,然后在超时(例如5秒)后将用户重定向到另一个页面 我需要一个成功登录后登录页面这一点。我尝试了以下操作,可以看到登录失败时的警告消息,但无法看到登录成功时的成功消息。它立即显示目标页面 public String check(){ if (username.equals("test") && password.equals("test")) { FacesContext.getCurrentInstance().addMessag
public String check(){
if (username.equals("test") && password.equals("test")) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));
return "Success";
}else{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Sample warn message", "Watch out for PrimeFaces!"));
return "Failure";
}
}
我使用Seam的PageFlow进行导航
我有一个
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
在登录页面上。首先,使用您发布的代码,您不会在重定向之前看到FacesMessage,而会在重定向之后看到它。但是,为了实现这一点,您需要添加一个过滤器,因为重定向时消息会丢失。这是所需过滤器的代码(别忘了在web.xml中声明): 在xhtml中,您需要有一个类似于以下内容的javascript函数:
function waitAndRedirect() {
setTimeout(function() {
hiddenButtonId.click();
}, 2000);
}
其中Hiddenbutonid是重定向到主页并隐藏的p:按钮的ID(显示:无)
但同样,这是一种令人讨厌的方法,在我看来,没有必要这样做,您只需延迟登录过程。这是Flash的实用程序之一。而不是
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));:
只需使用此代码
FacesContext facesContext = FacesContext.getCurrentInstance();
Flash flash = facesContext.getExternalContext().getFlash();
flash.setKeepMessages(true);
flash.setRedirect(true);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));
不能在web.xml中声明MultipageMessageSupport,必须在faces-config.xml中声明MultipageMessageSupport。por示例:
enter code here
<lifecycle>
<phase-listener>your.package.MultiPageMessagesSupport</phase-listener>
</lifecycle>
在此处输入代码
您的.package.multipageMessageSupport
Hello@Damian,我正在使用ajax,我尝试了Thread.currentThread().sleep(5000);它让页面等待5秒,但消息在重定向后显示,我只想在重定向前用该方法显示消息谢谢!!注意,这是一个面向JSF1.x的解决方案。在JSF 2.x中,使用flash scope有一种更好的方法。@Holysh我编辑了答案,解释了如何在重定向之前显示消息。setRedirect()
调用是不必要的。请注意,该消息将出现在目标页面中,因此OP必须在那里有一个
。Hi@BalusC我正在等待您的回答:)是的,它与我的代码以及用户提供的代码一起工作,但问题是,我如何在重定向前显示消息,然后在5秒后显示消息,例如重定向到另一个页面Hi Balus,setRedirect的确切用途是什么?@Holysh,显示消息5秒不符合人体工程学,因为用户可能看不到消息,或者可能会浪费5秒。
FacesContext facesContext = FacesContext.getCurrentInstance();
Flash flash = facesContext.getExternalContext().getFlash();
flash.setKeepMessages(true);
flash.setRedirect(true);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces rocks!"));
enter code here
<lifecycle>
<phase-listener>your.package.MultiPageMessagesSupport</phase-listener>
</lifecycle>