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>
这样,您可以显示空列表的任意替换。