p: рычание не работает после пересылки из p: commandButton - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь использовать простое <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));
         }
...