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

如何动态生成PanelGrid的行?(JSF,Primefaces),jsf,primefaces,javabeans,panel,Jsf,Primefaces,Javabeans,Panel,我正在尝试创建一个包含2列的PanelGrid,并从列表中加载数据。问题是它不会创建新行。它只是将整个列表放在第一行 与数据库没有通信。我需要显示的只是一个列表,每个值对应一行 以下是我的PanelGrid的外观: <p:panelGrid style="border:10px;"> <p:row> <p:column style="font-size:15px;font-we

我正在尝试创建一个包含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>

编辑


通过更改Java逻辑,创建键、值映射并将其显示在数据表中,我已经解决了这个问题。

按照您编写它的方式,它当然不会生成两行,一行用于标题,另一行包含两个COL,它们将输出
columnOne.toString()
columnTwo.toString()

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

根据您的评论,以下是我在我的方法中应该做的:

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

第二列与第一列相似


我没有使用
p:panelGrid
来避免在以编写数据的方式迭代数据时使用
c:forEach
,当然它不会生成两行,一行用于标题,另一行包含两个col,它们将输出
columnOne.toString()
columnTwo.toString()

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

根据您的评论,以下是我在我的方法中应该做的:

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

第二列与第一列相似


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

您没有使用p:panelGrid迭代列表 应该使用迭代器,如p:datatable或p:datagrid

和#{myService.columnOne}将输出对象columnOne,而不是其中的值

在datagrid中,定义一个变量来迭代列表

你应该这样定义

<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;
}
publicmyservice(){
第1栏。添加(“第1条”);
第1栏。添加(“第2条”);
第1栏。添加(“第3条”);
第二栏。添加(“某物1”);
第二栏。添加(“某物2”);
第二栏。添加(“某物3”);
}
公共列表getColumnOne(){
返回第一列;
}

您不会使用p:panelGrid迭代列表 应该使用迭代器,如p:datatable或p:datagrid

和#{myService.columnOne}将输出对象columnOne,而不是其中的值

在datagrid中,定义一个变量来迭代列表

你应该这样定义

<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;
}
publicmyservice(){
第1栏。添加(“第1条”);
第1栏。添加(“第2条”);
第1栏。添加(“第3条”);
第二栏。添加(“某物1”);
第二栏。添加(“某物2”);
第二栏。添加(“某物3”);
}
公共列表getColumnOne(){
返回第一列;
}

那么在哪里设置列的值呢?就像我在代码中做的那样?它会为每个值创建一行吗?如果您愿意使用我的方法,那么我会使用p:datatable,请参阅我的答案editedyor解决方案适合我,但是不可能在一个datatable中设置两列吗?我真的需要为每列创建两个数据表吗?我想要一个固定的2列表。这个答案没有提供这些。@BalusC,请注意在你的答案中,OP有两个列表,他希望每一列都从列表中取值。这就是为什么我建议使用两个DataTables,那么我应该在哪里设置列的值呢?就像我在代码中做的那样?它会为每个值创建一行吗?如果您愿意使用我的方法,那么我会使用p:datatable,请参阅我的答案editedyor解决方案适合我,但是不可能在一个datatable中设置两列吗?我真的需要为每列创建两个数据表吗?我想要一个固定的2列表。这个答案没有提供这些。@BalusC,请注意在你的答案中,OP有两个列表,他希望每一列都从列表中取值。这就是我建议使用两个DataTables的原因。这会为每个值生成一列。这只是一个示例。显然,提问者不(不)理解如何在JSF中迭代列表。所以我试着解释这一部分。这会为每个值生成一列。这只是一个例子。显然,提问者不(不)理解如何在JSF中迭代列表。所以我试着解释那部分。