将JSF标记与JSTL标记混合会产生奇怪的结果

我有这段代码:

               

如您所见,我仅在columnRendered为true时呈现该outputPanel。

好吧,有时会出现这种情况(仅用于测试以批准它应该做什么):

  

是的,所以它应该输入c:if并将columnRendered切换为false。 但事实并非如此,所以columnRendered永远是真的……

你知道为什么吗?

JSF和JSTL没有按照您对编码的期望同步运行。 JSTL在视图的构建期间运行(当要填充JSF组件树时),并且JSF在视图组件树的渲染时间期间运行(当要生成HTML输出时)。 您可以按如下方式对其进行可视化:JSTL首先从上到下运行,然后将结果移交给JSF,JSF又从上到下再次运行。

在您的特定情况下,对象instance永远不会出现在JSTL中。

而不是c:forEach ,你应该使用ui:repeat而不是c:if你应该使用JSF组件的rendered属性。 我想重写代码,但hideTypes的使用是一团糟。 而是将其转换为模型中的List ,并且使用纯JSF会更容易。 这是一个启动示例,假设hideTypesList