如何在PrimeFaces中插入含静态行与列的DataTable?
在PrimeFaces中创建带静态行列的DataTable
原代码无法正常运行的原因是:你把所有行的内容都直接塞进了<p:column>标签里,PrimeFaces的DataTable是按行结构渲染的,这种写法没法让组件识别正确的行布局,自然渲染不出正常的表格。
下面提供两种可行的解决方案:
方案1:前端手动定义静态行(无需后台数据)
直接用<p:row>标签逐行定义内容,每个<p:row>里的<p:column>对应该行的各列值,适合数据量少、完全固定的场景:
<div class="card"> <p:dataTable> <!-- 表头行 --> <p:column headerText="Color"></p:column> <p:column headerText="Test"></p:column> <!-- 第一行数据 --> <p:row> <p:column> <h:outputText value="Red" /> </p:column> <p:column> <h:outputText value="Test11111" /> </p:column> </p:row> <!-- 第二行数据 --> <p:row> <p:column> <h:outputText value="Yellow" /> </p:column> <p:column> <h:outputText value="Test22222" /> </p:column> </p:row> <!-- 第三行数据 --> <p:row> <p:column> <h:outputText value="Green" /> </p:column> <p:column> <h:outputText value="Test33333" /> </p:column> </p:row> <!-- 第四行数据 --> <p:row> <p:column> <h:outputText value="Orange" /> </p:column> <p:column> <h:outputText value="Test44444" /> </p:column> </p:row> </p:dataTable> </div>
方案2:绑定后台静态数据模型(规范写法)
如果数据稍多或者需要后续维护,建议用后台Bean定义静态数据列表,再绑定到DataTable上,符合PrimeFaces的标准使用模式:
后台Bean代码
import javax.faces.view.ViewScoped; import javax.inject.Named; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @Named @ViewScoped public class StaticDataBean implements Serializable { private List<StaticItem> items; public StaticDataBean() { // 初始化静态数据 items = new ArrayList<>(); items.add(new StaticItem("Red", "Test11111")); items.add(new StaticItem("Yellow", "Test22222")); items.add(new StaticItem("Green", "Test33333")); items.add(new StaticItem("Orange", "Test44444")); } public List<StaticItem> getItems() { return items; } // 内部数据类,存储每一行的字段 public static class StaticItem { private String color; private String test; public StaticItem(String color, String test) { this.color = color; this.test = test; } public String getColor() { return color; } public String getTest() { return test; } } }
前端页面代码
<div class="card"> <p:dataTable value="#{staticDataBean.items}" var="item"> <p:column headerText="Color"> <h:outputText value="#{item.color}" /> </p:column> <p:column headerText="Test"> <h:outputText value="#{item.test}" /> </p:column> </p:dataTable> </div>
内容的提问来源于stack exchange,提问作者danimunoz
相关产品推荐
相关产品推荐

