用于开发Portlets和JPS,因此陷入两难境地。
任务:仅当列表不为空时显示<h:dataTable>
是否可以为JSF页面提供<c:if>
标记?
答案 0 :(得分:6)
是的,您可以在JSF页面中添加JSTL标记。但是,在您的情况下,您只需执行以下操作:
<h:dataTable value="#{myBean.list}"... rendered="#{myBean.displayTable}">
...
</h:dataTable>
在myBean
中使用以下方法:
public boolean isDisplayTable() {
return list != null && list.size() > 0;
}
您也可以尝试(不确定它是否可行):
<!-- Idea from Colin Gislason -->
<h:dataTable value="#{myBean.list}"... rendered="#{not empty myBean.list}">
...
</h:dataTable>
<h:dataTable value="#{myBean.list}"... rendered="#{not myBean.list.empty}">
...
</h:dataTable>
请注意,您可以在EL表达式中使用!
而不是not
关键字(请参阅有关EL表达式的指南here),这会产生rendered="#{!empty myBean.list}"
。
答案 1 :(得分:1)
<c:if>
(和其他JSTL标记)可以在JSF中使用。但是,不能在迭代集合的组件内使用 - 如<h:dataTable>
。但在你的情况下,你想要外面的<c:if>
,所以它是可能的。但是,正如romaintaz指出的那样,最好使用rendered
属性。