从h:dataTable切换至PanelGrid无结果,组件配置是否有误?
解决h:panelGroup无法遍历列表展示数据的问题
你确实踩了一个常见的JSF组件用法误区:<h:panelGroup>不支持通过value和var属性来遍历集合,这俩属性是迭代类组件(比如<h:dataTable>、<ui:repeat>)专属的,<h:panelGroup>的核心作用只是分组组件、生成HTML块(比如div或span),完全没有迭代渲染的能力。所以你之前的代码里,给<h:panelGroup>加的value和var会被JSF直接忽略,自然页面上啥都不显示。
正确的写法:用<ui:repeat>实现迭代渲染
要实现自定义网格布局遍历列表,应该用<ui:repeat>来包裹你的<h:panelGroup>结构,让<ui:repeat>来负责遍历集合:
<h:panelGroup layout="block" styleClass="myGrid"> <ui:repeat value="#{mybean.view}" var="o"> <h:panelGroup layout="block" styleClass="col-sm-3"> <h:panelGroup layout="block" styleClass="griditem"> <h:outputText styleClass="description" value="#{o.name}" /> <h:outputText value="ID: #{o.id}" /> <!-- 按需添加ID展示 --> </h:panelGroup> </h:panelGroup> </ui:repeat> </h:panelGroup>
关键说明:
<ui:repeat>是JSF标准的迭代渲染标签,它会遍历value绑定的集合(也就是你的#{mybean.view}),每次迭代把当前元素赋值给var指定的变量o,然后渲染内部的所有组件。- 外层的
<h:panelGroup layout="block" styleClass="myGrid">用来生成整个网格的容器div,完全符合你原来的布局需求。 - 如果你不需要外层容器,也可以直接用
<ui:repeat>包裹内部的列组件。
这样修改后,页面就能正常遍历展示mybean.view里的所有数据了。
内容的提问来源于stack exchange,提问作者Yura
相关产品推荐
相关产品推荐

