我尝试使用简单的<p:commandButton/>
操作转发到另一个页面并显示<p:growl/>
。但是当我点击我的<p:commandButton/>
时,它只是转发到页面而不显示<p:growl/>
。我查看了其他项目中的一些示例代码,所有内容都检查出来,除了我在这个特定项目中使用漂亮的面孔,但在删除它进行简单的测试后,它也没有任何作用。
这是我能找到的最接近我的问题:p:growl doesn't work after JSF page forward, but works with page redirect。
除了那个问题之外,除了我的重定向之外我也没有。我发现的大部分内容都是关于不使用重定向。
我的forward.xhtml
看起来像这样:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<h:head>
</h:head>
<h:form id="form">
<p:growl id="growl" />
<!-- Some other code -->
<p:commandButton value="Simple Button"
action="#{forwardPageBean.forward()}"
update=":form:growl" ajax="false" />
</h:form>
</html>
我转发到homePage.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:pe="http://primefaces.org/ui/extensions">
<h:head>
</h:head>
<h:form id="form">
<!-- Some other code -->
</h:form>
</html>
我的managedBean看起来像这样:
@ViewScoped
@ManagedBean
public class ForwardPageBean implements Serializable{
private static final long serialVersionUID = 1L;
public String forward(){
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Random message", null));
return "homePage.xhtml";
}
}
这是我到目前为止所尝试的内容:
我意识到这是用于当你进行重定向并希望保留消息时,但我认为我应该尝试一下。
context.getExternalContext().getFlash().setKeepMessages(true);
我尝试更改为actionListener进行简单的测试并且它可以正常工作。但是因为它不是用于导航,所以实际上并没有解决我的问题。
<p:commandButton value="Simple Button"
actionListener="#{forwardPageBean.forward()}"
update=":form:growl" ajax="false" />
最后,我尝试在<p:commandButton/>
中同时使用actionListener和action,即使actionListener方法正确执行并且正向操作发生,它仍然没有显示<p:growl/>
< / p>
<p:commandButton value="Simple Button" action = "homePage.xhtml"
actionListener="#{forwardPageBean.forward()}"
update=":form:growl" ajax="false" />
public void forward(){
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getFlash().setKeepMessages(true);
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Random message", null));
}