JSF ui:包括未正确呈现

我正在使用JSF 2.1.8实现一个Web应用程序,我遇到了ui:include标记的问题。 我有这个代码

        

navigationManagerSystem bean是JSF会话管理的,当首次呈现这段代码时,它应该显示包含路径内容。 如果我在像这样的常量中执行此操作,但是如果我将它放在变量中则不行,即使我已经看到变量在屏幕之前保持该值打印。我不知道它是否与持有/system/home/index.xhtml页面的bean相关,这是View Scoped

无论如何,如果我在页面渲染后立即刷新页面,则正确包含xthml。 顺便说一句,我已经简化了要包含的页面,以便没有任何jstl标签,因为我知道它们可能会导致View Scope出现问题。

有什么想法吗?

至于问题的原因, 在视图构建时间(恢复视图阶段)期间运行,而不是在您期望的视图渲染时间(渲染响应阶段)期间运行。 因此,如果包含路径在例如调用操作阶段或甚至呈现响应阶段期间发生更改,则除非完全重建,否则它将不会反映在视图中。

目前,您最好的选择是使用多个静态标记,这些标记在视图渲染时间内有条件地呈现。 没错,最终会出现一个不必要的大型组件树。 对于这个问题,仍然没有“圣杯”解决方案。 问题清楚地被理解,但考虑到JSF / Facelets生命周期,解决方案很难。 我也为OmniFaces做了一些实验,但是最简单的尝试在MyFaces中很难在Mojarra中工作(在某种程度上)。

也可以看看:

  • 如何通过导航菜单ajax-refresh动态包含内容? (JSF SPA)
  • 使用进行动态ajax导航