重建组件树

时间:2014-04-15 07:24:53

标签: jsf jsf-2.2

我正在从Oracle网站学习JSF生命周期,并且遇到有关组件树重建的模糊点。

根据我的理解,整个组件树将在基于最新视图状态保存的每个回发请求(包括ajax)之后重建,所以我的问题是在从已保存的视图状态成功重建组件树之后会是什么服务器使用旧的组件树和旧的视图状态,丢弃或存储在某个地方,如视图池,以便以后重用?

1 个答案:

答案 0 :(得分:0)

这取决于您使用的状态保存模式。如果使用客户端状态保存,则与视图相关的信息将存储到javax.faces.ViewState隐藏字段参数中。当服务器收到请求时,它会从状态创建视图,处理它并在响应中写入字段。如果使用服务器端状态保存,状态将存储到会话中,因此在某些情况下会存在旧状态,但是有一种算法可以从会话中丢弃旧视图。

使用JSF 2.0部分状态保存(PSS),视图来自两个方面:初始状态和增量状态。初始状态源自使用facelets algoritm再次构建视图。因此,存储为视图状态的只是整个状态的一小部分。这个技巧确实非常有效,因此在改进之后,人们不再需要关心JSF的状态大小了。与无状态框架相比,这导致了非常好的性能。见Understanding JSF Performance part 3 on JSFCentral

Apache MyFaces 2.2中有一个视图池算法。这个想法是利用状态保存算法并使用它来重用已经构建的视图。它可以使您的性能提升约8-10%,但第三方库需要与此方法兼容。见How to configure View Pool in Apache MyFaces。这被认为是获得“终极性能”的解决方案,但大部分时间你都可以在没有它的情况下使用它。

启用PSS的Facelets算法在两点中调用:构建或恢复视图时以及渲染响应阶段之前刷新c:if等组件。