以下代码正在使用请求范围托管Bean,并且消息显示在p:messages
标记中:
FacesContext context = FacesContext.getCurrentInstance();
public void addAction() {
if(commande.exists()) {
context.addMessage("Commande", new FacesMessage(
FacesMessage.SEVERITY_ERROR,"Error Message : commande exists", null));
} else {
commandeService.create(commande);
}
}
当我尝试在视图作用域 Managed Bean中使用它时,它会在记录器中显示错误消息:
Error the FacesContext is already released!
并且JSF页面挂起而没有显示面部消息。
答案 0 :(得分:1)
您应永远将FacesContext
或其任何属性的当前实例指定为托管bean的属性。当前实例仅在当前HTTP请求中有效,它在HTTP请求结束时被销毁,在任何后续HTTP请求中都不再有效。
您应始终在方法本地范围内获取当前实例。
public void addAction() {
if (commande.exists()) {
FacesContext.getCurrentInstance().addMessage("Commande", new FacesMessage(
FacesMessage.SEVERITY_ERROR, "Error Message : commande exists", null));
} else {
commandeService.create(commande);
}
}