Servlets 显示从Servlet到JSF页面的消息
我试图在servlet的xhtml页面中显示成功消息,但运气不好,下面是我的代码 在servlet中,我有Servlets 显示从Servlet到JSF页面的消息,servlets,jsf-2,facelets,Servlets,Jsf 2,Facelets,我试图在servlet的xhtml页面中显示成功消息,但运气不好,下面是我的代码 在servlet中,我有 FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFi
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=user编写了标记
<h:message class="success" for="displaymessagesave" id="displaymessagesave" />
正在保存到数据库,但未显示任何消息,请指出我的错误所在 不要为消息提供与“for”组件相同的id。如果您只需要messageholder而不将其附加到valueholder,那么应该使用标记
<h:messages class="success" id="displaymessagesave" />
除了
FacesServlet
之外,无法从servlet访问FacesContext
最近我遇到了同样的问题,我所做的是,在我的servlet上,将消息放入会话中:
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);
最后,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 "";
}
公共字符串prepareMessages()
{
List msgs=(List)FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap().get(键);
如果(msgs!=null)
{
用于(字符串消息:msgs)
{
FacesContext.getCurrentInstance().addMessage(空,
新面孔信息(msg);
}
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().remove(键);
}
返回“”;
}
这可能不是一个优雅的解决方案,但却是我发现的唯一解决方案…我尝试只使用id,但仍然没有显示任何消息。您是否尝试使用h:messages而不是h:message?您还必须更新h:messages组件才能在UI上查看消息。
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 "";
}