喜欢,即使绑定集合为空,是否可以至少运行一次<ui:repeat>
?认为:
<ui:repeat value="#{some.bean.some.collection}" var="item" varStatus="status">
...
</ui:repeat>
无论some.bean.some.collection
中的内容是什么,我如何让它至少运行一次?
答案 0 :(得分:2)
不,没有这样的设施,至少在核心JSF规范中没有。当然,你可以编写自己的JSF组件,这并不是非常困难。
尽管如此,即使有可能,我也不认为这是一个好主意(这可能是因为它不包含在核心JSF中)。
使用JSF,它(恕我直言)通常是保持逻辑服务器端的好主意,而不是将其放入组件和EL表达式中。因此,如果集合为空,我建议让bean中的getter返回一些占位符元素。如果集合也是可写的,这会变得更加棘手,但可能仍然可行。
让bean返回专门为一个数据视图定制的数据是完全可以接受的,这是一个例子。有关更多详细信息,请参阅视图模型和演示模型的概念。
另一种方法:
如果列表为空,您是否只想显示一些占位符文本(或控件)?例如&#34;没有可用的数据&#34;,可能有一个按钮&#34;开始导入&#34;或者这样。
然后你可以在列表之后添加第二个标记块,并将它们包装在一个容器中,例如带有ui:fragment
属性的rendered
,这样就可以呈现列表如果有数据,则占位符块如果不存在:
<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>
这样你就可以显示空列表的任意替换。