JSF条件渲染页脚(JSF facet)

4
如果数据表格内容为空,我希望呈现一个特定内容的页脚。
我找到了这个链接:How do I conditionally render an <f:facet>? 但是它并不能解决我的问题,因为它只会在消息不为空时呈现页脚。
 <f:facet name="footer">
      <h:outputText value="List is empty" rendered="#{empty list}" />
 </f:facet>

如果列表为空,这确实有效,但如果不为空,这将会渲染一个空行作为页脚...

有其他的解决方法吗?感谢您的帮助!我正在使用MyFaces 2.0.13。


FYI:这在 Mojarra 2.1.12 中对我有效。 - BalusC
2个回答

1
据我所知,在JSF 1.2中没有简单的方法来实现这一点。
但是你可以使用以下解决方法:
创建一个带有"display: none"属性的CSS类:
.hidden { display: none; }

在您的dataTable中,将footerClass属性指定如下:
<h:dataTable footerClass="#{hideFooterCondition ? 'hidden' : ''}">

通过这种方式,您可以在需要时轻松隐藏页脚。
此外,如果您想要在页脚不存在的情况下减少发送到浏览器的数据量,您可以在 facet 的内容的 rendered 属性中使用相同的条件。
<f:facet name="footer">
    <rich:datascroller for="myDataTable" rendered="#{not hideFooterCondition}" />
</f:facet>    

请注意,OP的具体问题特别涉及MyFaces <h:dataTable>(我已确认OP的代码在Mojarra中可以正常工作)。 - BalusC

-1
你可以使用 hpanel 来控制这个,而不是使用 facet。我在几个 JSF 应用程序中经常使用这种技术。根据我所读的内容,在视图中使用条件语句被认为是 JSF 中的不良实践。HTML:
<h:panelGroup rendered="#{isEmpty}">
  <h:outputText value="List is empty" />
</h:panelGroup>

后援者 Bean:

boolean isEmpty = false;
if (list.isEmpty()) {
  isEmpty = true;
}

也尝试过那种方法,但无论列表是否为空,它似乎都不会呈现任何内容 :( - user1323246
从backer bean检查的变量应该是一个布尔值,如果列表为空则设置为true,如果列表包含值则设置为false。 - Lipongo
这个“答案”没有意义。 - BalusC
@BalusC 我编辑了答案,包括后备bean,这可能有助于回答更加清晰。在之前的评论后意识到需要更多信息。 - Lipongo
将父组件包装并将 rendered 属性移动到其中,在 OP 的特定问题中完全没有任何区别。 - BalusC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接