我试图创建一个有2列的PanelGrid,并从列表加载数据。问题是它不创建新行。它只是把整个列表放在第一行。
与数据库没有通信。它只是一个我需要显示的列表,每个值对应一行。
我的PanelGrid是这样的:
<p:panelGrid style="border:10px;">
<p:row>
<p:column style="font-size:15px;font-weight:bold;">Column1</p:column>
<p:column style="font-size:15px;font-weight:bold;">Column2</p:column>
</p:row>
<p:row>
<p:column style="width:35%">
<h:outputText value="#{myService.columnOne}" />
</p:column>
<p:column style="width:35%">
<h:outputText value="#{myService.columnTwo}" />
</p:column>
</p:row>
</p:panelGrid>
和这是我的列表在MyService.java:
public List<String> columnOne = new ArrayList<String>();
public List<String> columnTwo = new ArrayList<String>();
我只是用
在我的方法中添加一些值columnOne.add("String");
…
编辑
我已经解决了它通过改变我的Java逻辑,通过创建一个键,值映射,并显示在一个数据表。
不用p:panelGrid来迭代列表应该使用p:datatable或p:datagrid
这样的迭代器。# {myService。columnOne}将输出对象columnOne,而不是其中的值。
在datagrid中定义一个var来迭代列表。
你应该这样定义;
<p:dataGrid style="border:10px;" value="#{myService.columnOne}" var="col" columns="3">
<p:panel header="col" style="text-align:center">
<h:outputText value="#{col}"/>
</p:panel>
</p:dataGrid>
和
public myservice() {
columnOne.add("String1");
columnOne.add("String2");
columnOne.add("String3");
columnTwo.add("Something1");
columnTwo.add("Something2");
columnTwo.add("Something3");
}
public List<String> getColumnOne() {
return columnOne;
}
在你写它的方式,当然它不会做,但只有两行,一个标题和另一个包含两个颜色,他们将输出columnOne.toString()
和columnTwo.toString()
。
一定有某种方法可以在一个p:panelGrid
中显示它们。但是,如果您确定两个列表具有相同的大小,我认为最好的方法(优化并且在Java代码中不需要额外的代码)是使用两个p:panelGrid
,每个都将显示一列。之后,使用CSS使它们显示为唯一的表。
根据你的意见,我应该这样做:
<p:dataTable var="colValue" value="#{myService.columnOne}">
<p:column headerText="Column1">
<h:outputText value="#{colValue}" />
</p:column>
</p:dataTable>
第二列和第一列一样
我没有使用p:panelGrid
来避免在迭代数据
c:forEach