2015-01-06 4 views
0

Я использую primaryfaces 3.5, и я не могу понять, как рычать сообщение на следующей странице. Например, я хочу добавить запись в базу данных, после чего я перенаправляю другую страницу, где я хочу показать сообщение о рычании с «Запись была добавлена ​​с успехом!» я пытался что-то вроде этого:Как показать сообщение о гладкости на следующей странице?

public String addLabelInDB() { 
     try { 
      //logic to add a record in DB 

      FacesContext context = FacesContext.getCurrentInstance(); 
      context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success!", "Label has been added with success!")); 

     } catch (Exception e) { 
      logger.debug(e.getMessage()); 
     } 
     return "listLabelsPage"; 
    } 

и в listLabelsPage.xhtml у меня есть:

<p:growl id="msgs" showDetail="true" autoUpdate="true"/> 

, но он не работает. Я полагаю, что сообщение теряется, потому что это другой запрос или что-то еще? Есть ли возможность сохранить сообщение по запросу и показать его на следующей странице? Благодаря!

ответ

1

Вы можете стать пререндером установить на listLabelsPage.xhtml странице вы загружаете

<f:event type="preRenderView" listener="#{yourBean.showGrowl}" /> 

и метод showGrowl, имеющую только

public void showGrowl() { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success!", "Label has been added with success!")); 
} 
+0

Хотя с помощью раствора сообщение всегда показал OnLoad из listLabelsPage.xhtml это помогает меня много, потому что установка флага, если вставка была выполнена с успехом, я достигла того, что я что. – Aditzu

0

я отправляю ответ на свой вопрос чтобы помочь другим людям, которые сталкиваются с такой же проблемой, как я:

public String addLabelInDB() { 
     try { 
      //some logic to insert in db 
      //below I set a flag on context which helps me to display a growl message only when the insertion was done with success 
      ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
      ec.getRequestMap().put("addedWithSuccess","true"); 

     } catch (Exception e) { 
      logger.debug(e.getMessage()); 
     } 
     return "listLabelsPage"; 
    } 

    public void showGrowl() { 
      ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
      String labelAddedWithSuccess = (String) ec.getRequestMap().get("addedWithSuccess"); 
      //if the flag on context is true show the growl message 
      if (labelAddedWithSuccess!=null && labelAddedWithSuccess.equals("true")) { 
       FacesContext context = FacesContext.getCurrentInstance(); 
       context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success!", "Label has been added with success!")); 
      } 
     } 

и в моем XHTML у меня есть:

<f:event type="preRenderView" listener="#{labelsManager.showGrowl}" /> 
+0

Не работает ... externalContext не имеет этого объекта с именем «addedWithSuccess» на следующей странице –

+0

Не на внешнемКонтексте, а на запросе из внешнего контекста. Возможно, вы сделали еще одну просьбу. Это для добавления «addedWithSuccess» в сеанс, если по запросу не работает для вас – Aditzu

0

Как насчет этого? Сделать отделенный кнопку переадресации, которая будет удар после того, как показывает сообщ:

HTML:

<h:form prependId="false"> 
    <p:growl /> 
    <p:button outcome="gotoABC" id="rdr-btn" style="display: none;" /> 
    <p:commandButton action="#{bean.process()}" update="@form" /> 
</form> 

Bean:

public void process(){ 
    addInfoMsg(summary, msgDetail); //Add msg func 
    RequestContext.getCurrentInstance().execute("setTimeout(function(){ $('#rdr-btn').click(); }, 3000);"); // 3 seconds delay. I put the script in Constants to config later. 
} 
Смежные вопросы