我正在尝试创建一个包含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中的List:
public List<String> columnOne = new ArrayList<String>();
public List<String> columnTwo = new ArrayList<String>();
我只需在
的方法中添加一些值columnOne.add("String");
...
修改
我通过改变我的Java逻辑,通过创建一个Key,Value Map并将其显示在数据表中来解决它。
答案 0 :(得分:2)
在编写它的方式中,当然它不会只有两行,一个用于标题,另一行包含两个列,它们将输出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
答案 1 :(得分:2)
您不使用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>
并在bean中
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;
}