如何动态生成PanelGrid行? (JSF,Primefaces)

时间:2013-03-26 08:27:43

标签: jsf primefaces javabeans panel

我正在尝试创建一个包含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并将其显示在数据表中来解决它。

2 个答案:

答案 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;
}