关于问题的原因,
<ui:include>在视图构建时间(还原视图阶段)中运行,而不是在您期望的视图渲染时间(渲染响应阶段)中运行。因此,如果包含路径在例如调用操作阶段甚至渲染响应阶段发生更改,那么除非将其完全重建,否则它将不会反映在视图中。
当前,最好的选择是使用多个静态
<ui:include>标签,每个标签在视图渲染期间有条件地渲染。没错,这最终导致不必要的大组件树。对于此问题,仍然没有“圣杯”解决方案。可以清楚地理解问题,但是鉴于JSF
/
Facelets生命周期,解决方案很难。我也为OmniFaces进行了一些实验,但是最简单的尝试在MyFaces中失败了,而在Mojarra中(一定程度上)起作用了。



