【问题标题】:JSF conditionally render footer (jsf facet)JSF 有条件地渲染页脚(jsf facet)
【发布时间】:2012-08-31 09:15:42
【问题描述】:

如果数据表内容为空,我想呈现一个页脚(带有特定内容)。

我找到了这个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。

【问题讨论】:

  • 仅供参考:这在 Mojarra 2.1.12 中适用于我。

标签: jsf datatable render myfaces facet


【解决方案1】:

据我所知,在 JSF 1.2 中没有简单的方法可以做到这一点。

但您可以使用此解决方法:

用display: none创建一个css类:

.hidden { display: none; }

在您的数据表中,指定footerClass 属性,如下所示:

<h:dataTable footerClass="#{hideFooterCondition ? 'hidden' : ''}">

这样您就可以轻松地将页脚隐藏起来。

另外,如果你想在页脚不存在的情况下减少发送到浏览器的数据,你可以在facet内容的rendered属性中使用相同的条件:

<f:facet name="footer">
    <rich:datascroller for="myDataTable" rendered="#{not hideFooterCondition}" />
</f:facet>    

【讨论】:

  • 请注意,OP 的具体问题特别关注 MyFaces &lt;h:dataTable&gt;(我已经确认 OP 的代码在 Mojarra 中运行良好)。
【解决方案2】:

您可以使用 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;
}

【讨论】:

  • 也试过了,但不知何故,无论列表是否为空,它都不会呈现任何内容:(
  • 从 backer bean 检查的变量应该是一个布尔值,如果列表为空并且列表中的 false 包含值,则设置为 true。
  • 这个“答案”毫无意义。
  • @BalusC 我编辑了答案以包含支持 bean,可能有助于答案有意义。在之前的评论之后意识到它需要更多信息。
  • 包装父组件并将rendered属性移动到它对OP的特定问题完全没有影响。
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 2012-01-05
  • 2015-06-01
  • 2012-08-13
  • 2012-05-10
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多