Я пытаюсь использовать простое <p:commandButton/>
с действием, которое перенаправляет на другую страницу и отображает <p:growl/>
.Но когда я нажимаю на <p:commandButton/>
, он просто переходит на страницу без отображения <p:growl/>
.Я просмотрел некоторые примеры кодов из других проектов, и все проверяется, за исключением того, что я использую симпатичные лица в этом конкретном проекте, но после удаления его для простого теста это тоже не имело значения.
Это наиболее близкая к моей проблеме проблема: p: growl не работает после перенаправления страницы JSF, но работает с перенаправлением страницы .
За исключением того, что мой не работает с перенаправлением либокроме этого одного вопроса.Большая часть содержимого, которое я обнаружил, была о том, что я не работал с перенаправлением.
Мой 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" />
И, наконец, я попытался использовать и actionListener, и action в моем <p:commandButton/>
, и хотя метод actionListener выполняется правильно и происходит прямое действие, он все равно не отображает <p:growl/>
<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));
}