JSF 中是否存在 do-while-loop 构造,或者是否可以至少运行一次 ,即使绑定列表为空



Like,是否可以至少运行一次<ui:repeat>,即使绑定集合为空?想:

<ui:repeat value="#{some.bean.some.collection}" var="item"  varStatus="status">  
   ... 
</ui:repeat>  

我如何让它至少运行一次,不管some.bean.some.collection是什么?

不,没有这样的工具,至少在核心 JSF 规范中没有。当然,您可以编写自己的 JSF 组件,这并不难。

也就是说,即使有可能,我认为这不是一个好主意(这可能就是为什么它不包含在核心 JSF 中的原因(。

对于 JSF,(恕我直言(通常最好保留逻辑服务器端,而不是将其放入组件和 EL 表达式中。因此,如果集合为空,我建议让 bean 中的 getter 返回一些占位符元素。如果集合也是可写的,但可能仍然可行,这会变得更加棘手。

让您的 bean 返回专门为数据视图量身定制的数据是完全可以接受的,这就是一个例子。例如,有关更多详细信息,请参阅视图模型和表示模型的概念。


另一种方法:

如果列表为空,是否只想显示一些占位符文本(或控件(?例如"无可用数据",也许带有"开始导入"按钮等。

然后,您可以在列表之后放置第二个标记块,并将两者包装在容器(例如带有 rendered 属性的 ui:fragment(中,这样如果有数据则呈现列表,如果没有数据,则呈现占位符块:

<ui:fragment rendered="#{not empty some.bean.some.collection}">
    <ui:repeat value="#{some.bean.some.collection}" var="item" varStatus="status">  
       ... 
    </ui:repeat>  
</ui:fragment>
<ui:fragment rendered="#{empty some.bean.some.collection}">
<strong class="warning">No data available</strong>
</ui:fragment>

这样,您可以显示空列表的任意替换。

相关内容

最新更新