2014-04-02 89 views
1

我试图从servlet的,但没有运气显示XHTML页面成功的消息,这是我的代码 在servlet的,我有显示消息从Servlet来JSF页面

FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); 
      LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); 
      Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); 
      FacesContext facesContext = contextFactory.getFacesContext(request.getSession().getServletContext(), request, response, lifecycle); 
      facesContext.addMessage("user:displaymessagesave", new FacesMessage("user saved successfully")); 

在XHTML页面内形式我已经写标签显示消息的形式ID =用户

<h:message class="success" for="displaymessagesave" id="displaymessagesave" /> 

保存到数据库中正在发生的事情,但它不是显示任何消息,请建议我要去哪里错了。

回答

0

不要为“for”组件提供相同的消息ID。如果你只是想让一个消息持有者没有附加到一个值持有者,那么你应该使用这个标签。

<h:messages class="success" id="displaymessagesave" /> 
+0

我尝试使用只有ID,但它仍然不显示任何信息相同。 – user2644886

+0

你用h:消息而不是h:message来试试吗? – Tushee

+0

是的,我试过没有运气。 – user2644886

0

无法从除FacesServlet以外的servlet访问FacesContext。

最近我面临着同样的问题,我所做的是,在我的servlet,把消息在Session:

List<String> msgs=(List<String>)request.getSession().getAttribute(KEY); 
if (msgs==null) 
{ 
    msgs=new ArrayList<String>(); 
} 
msgs.add("My new message"); 
request.getSession().setAttribute(KEY, msgs); 

然后,在XHTML看法,我添加了一个电话把这些信息上的FacesContext和growl元件:

<h:outputText value="#{managed.prepareMessages()}"/> 
<p:growl id="growl" showDetail="false" life="4000" /> 

最后,该方法prepareMessages从会话取它们和消息添加到FacesContext

public String prepareMessages() 
{ 
    List<String> msgs = (List<String>)FacesContext.getCurrentInstance() 
          .getExternalContext().getSessionMap().get(KEY); 
    if (msgs!=null) 
    { 
     for(String msg:msgs) 
     { 
      FacesContext.getCurrentInstance().addMessage(null, 
                new FacesMessage(msg)); 
     } 
     FacesContext.getCurrentInstance().getExternalContext() 
             .getSessionMap().remove(KEY); 
    } 
    return ""; 
} 

它可能不是一个完美的解决方案,但是是唯一一个我发现......