没有 JSTL 标签,没有。它们在视图构建期间运行,而不是在视图渲染期间运行。您可以将其可视化如下:当 JSF 构建视图时,JSTL 标签首先从上到下运行,结果是一个纯 JSF 组件树。然后当 JSF 渲染视图时,JSF 组件从上到下运行,结果是一堆 HTML。因此,JSTL 和 JSF 不会像您对编码所期望的那样同步运行。在您的<c:if>
JSTL 标签运行时,#{topicId}
由<ui:repeat>
JSF 组件设置的变量在范围内不可用。
<c:if>
您需要在rendered
感兴趣的 JSF 组件的属性中指定条件,而不是使用。因为你实际上没有,你可以把它包装在一个<ui:fragment>
.
<ul>
<ui:repeat value="#{topics.list}" var="topicId" >
<li>#{topicId}</li>
<ui:fragment rendered="#{topicId eq -1}"><br/></ui:fragment>
</ui:repeat>
</ul>
替代品是<h:panelGroup>
<h:panelGroup rendered="#{topicId eq -1}"><br/></h:panelGroup>
或在您的特定情况下<h:outputText escape="false">
<h:outputText value="<br/>" escape="false" rendered="#{topicId eq -1}" />
因为当没有指定客户端属性时,两者也不会向 HTML 输出发出任何其他内容。
也可以看看:
与具体问题无关,这是一个错误的地方<br/>
。任何遵守 HTML 规范的网络浏览器都会忽略它。你不是说要在里面吗<li>
?或者更好的是,给它一个class
,让 CSS 给它一个margin-bottom
.