我有一个特定类的对象列表。每个对象都有两个字段:id
和value
。我必须通过JSF显示该列表,每行两个元素,如:
id1 value1 id2 value2
id3 value3 id4 value4
id5 value5 id6 value6
我不希望他们以随机方式被扔到那里。我宁愿考虑在一些表格中显示它(有4列),所以它们看起来不会很混乱(如果一个值比其他值短)。
我考虑过使用h:panelGroup
,但我不能使用c:forEach
,因为我的列表在那时没有可用(是的,我累了,它没有打印出来)。 ui:repeat
不能与h:panelGroup
一起使用。
我认为我不能使用h:dataTable
,因为我需要在一行中打印两个列表元素,而h:dataTable
并不是用这样的东西创建的。
我该怎么办?
(我是JSF-noob,或者......最糟糕的是:我是 JSF-noob,然后长时间没有联系它)
答案 0 :(得分:0)
要解决此问题,首先必须将列表成对分组,然后可以使用ui:repetat + html表打印结果,如:
@Named(value = "newJSFManagedBean")
@SessionScoped
public class NewJSFManagedBean implements Serializable {
private List<String> cars;
private List<List<String>> finalList;
/**
* Creates a new instance of NewJSFManagedBean
*/
public NewJSFManagedBean() {
}
@PostConstruct
public void loadCars() {
//Load main list
cars = new ArrayList<>();
cars.add("Volvo");
cars.add("Volvo1");
cars.add("Volvo2");
cars.add("Volvo3");
cars.add("Volvo4");
cars.add("Volvo5");
cars.add("Volvo6");
cars.add("Volvo7");
cars.add("Volvo8");
cars.add("Volvo9");
//Gruping in pairs
finalList = new ArrayList<>();
List<String> groupList = new ArrayList<>();
for (String car : cars) {
if (groupList.size() == 2) {
finalList.add(groupList);
groupList = new ArrayList<>();
}
groupList.add(car);
}
finalList.add(groupList);
}
public List<String> getCars() {
return cars;
}
public void setCars(List<String> cars) {
this.cars = cars;
}
public List<List<String>> getFinalList() {
return finalList;
}
public void setFinalList(List<List<String>> finalList) {
this.finalList = finalList;
}
}
和xhtml
<table>
<tr>
<th>ID</th>
<th>VALUE</th>
<th>ID</th>
<th>VALUE</th>
</tr>
<ui:repeat var="item"
value="#{newJSFManagedBean.finalList}">
<tr>
<ui:repeat var="subItem"
value="#{item}">
<td>someId</td>
<td>#{subItem}</td>
</ui:repeat>
</tr>
</ui:repeat>
</table>