如何动态生成PanelGrid的行?(JSF,Primefaces)
我正在尝试创建一个包含2列的PanelGrid,并从列表中加载数据。问题是它不会创建新行。它只是将整个列表放在第一行 与数据库没有通信。我需要显示的只是一个列表,每个值对应一行 以下是我的PanelGrid的外观:如何动态生成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
<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中迭代列表。所以我试着解释那部分。