1

我正在尝试创建一个具有 2 列的 PanelGrid 并从List加载数据。问题是它不会创建新行。它只是将整个列表放在第一行。

没有与数据库的通信。这只是我需要显示的一个列表,每个值都有一行。

这就是我的 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 逻辑、创建键值映射并将其显示在数据表中来解决它。

4

2 回答 2

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>

和豆

    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;
}
于 2013-03-26T10:15:13.347 回答
2

在您编写它的方式中,它当然不会只创建两行,一个用于标题,另一个包含两个列,它们将输出columnOne.toString()and columnTwo.toString()

必须有某种方式将它们仅显示在一个中p:panelGrid。但是,如果您确定两个列表的大小相同,我认为最好的方法(优化并且 Java 代码中不需要额外的代码)是使用两个p:panelGrids,每个列表将显示一列。之后,您可以使用 CSS 使它们显示为一个独特的表格。

根据您的评论,我应该在我的方法中做些什么:

<p:dataTable var="colValue" value="#{myService.columnOne}">    
  <p:column headerText="Column1">  
        <h:outputText value="#{colValue}" />  
  </p:column>
</p:dataTable> 

第二列就像第一列。

迭代数据时我没有使用p:panelGrid避免使用c:forEach

于 2013-03-26T09:27:14.290 回答