JSF手记(二)

1.关键字:h:messages不显示,java.lang.IllegalStateException: FacesContext already released。

a. 这次忙了近两天,就是为了让h:messages显示。其实它的显示是非常用简单的,但不了解它的显示机制,还是会出些意想不到的问题。最后查到我的问题是因为我会通过URL的/search.jsf?clear=true来跳转页面,所以我在页面里加了jstl标签:<c:if test="${param.clear == 'true'}">进行判断,如果h:messages在些段里,那么它只会在跳转之后才显示(这是我这里的特殊情况)。而在网上查到h:messages只显示一次,所以我猜想它可能在跳转之前已显示,从而造成跳转之后没有显示了。最后,我把jstl的判断:<c:if> 之类的全去掉了,不进行页面跳转, 问题解决。但具体细节还是没明白,以后再研究。

b. 但是在上面的a问题发生时,我为了查找addMessage是否成功添加信息,特意做了件笨事,我把FacesContext objContext定为全局变量,在构造函数里objContext= FacesContext.getCurrentInstance();然后在其它方法里用objContext.addMessage添加信息。所以在运行出现了java.lang.IllegalStateException: FacesContext already released,在网上找了些蛛丝马迹,最终放弃这种方式,去掉全局变量的做法,直接在每个方法里写成:FacesContext objContext= FacesContext.getCurrentInstance();
objContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
"TEST", "detail")); 问题解决。但具体细节还是没明白,以后再研究。

c. h:messages不显示解决方法之一: 把此标签放入<h:panelGrid>里,且在局部更新时reRender此panelGrid.

你可能感兴趣的:(JSF)