迭代通过对象
问题描述:
在Primefaces 5.1(Tomcat的8和Servlet 3.0)的嵌套列表可以通过使用List<Objects>
数据网格,DataList的,数据表等迭代..例如:迭代通过对象
<p:dataTable var="car" value="#{dtBasicView.cars}">
<p:column headerText="Id">
<h:outputText value="#{car.id}" />
</p:column>
</p:dataTable>
控制器:
@ManagedBean(name="dtBasicView")
@ViewScoped
public class BasicView implements Serializable {
private List<Car> cars;
@ManagedProperty("#{carService}")
private CarService service;
@PostConstruct
public void init() {
cars = service.createCars(10);
}
public List<Car> getCars() {
return cars;
}
public void setService(CarService service) {
this.service = service;
}
}
但说Car
对象具有类似于washes
一个属性,因此,当我做:
<h:outputText value="#{car.washes}" />
在dataTable里面它返回一个List<Washes>
的列表。我无法选择索引,因此如何迭代数据表中的List<Washes>
?
我知道我可以在数据表中创建一个dataGrid,然后按照与汽车一样的方式来遍历洗涤列表。但是这会创建一个新的“在其中一个单元格内具有边框的HTML表格”。我如何才能迭代虽然名单和输出从洗字符串:#{washes.foo}
更新:
Property 'foo' not found on type org.hibernate.collection.internal.PersistentSet
当我:试图使用<ui:repeat>
按照答案时,我得到这个错误使用<p:dataGrid>
而不是<ui:repeat>
它的工作原理。
而且,我返回集而不是一个列表,所以我只好用指定者()
答
你可以嵌套另一个迭代组件一样,你可以窝在普通的Java一个for
循环。
下面是一个例子嵌套另一个<p:dataTable>
,假设Wash
有一个属性foo
:
<p:dataTable value="#{bean.cars}" var="car">
<p:column headerText="Washes">
<p:dataTable value="#{car.washes}" var="wash">
<p:column headerText="Foo">#{wash.foo}</p:column>
</p:dataTable>
</p:column>
</p:dataTable>
使用<ui:repeat>
或许<h:dataTable>
如果你想markupless/styleless迭代:
<p:dataTable value="#{bean.cars}" var="car">
<p:column headerText="Washes">
<ui:repeat value="#{car.washes}" var="wash">
#{wash.foo}
</ui:repeat>
</p:column>
</p:dataTable>
它的方式奇怪的是使用复数作为类名,而在List
中可以有多个。您可能需要将Washes
重命名为Wash
。上面的代码片段已经考虑到了这一点。你会发现代码变得更加自我记录。
更新按你的错误; <ui:repeat>
和<h:dataTable>
组件不支持迭代Set<E>
。该支持将在未来的JSF 2.3版本中提供。如果它不是由List<E>
更换Set<E>
选项,然后只得到一个数组出来的,如下:
<ui:repeat value="#{car.washes.toArray()}" ...>
您好,我试过UI:重复和h:dataTable的,但他们不会显示#{wash.foo }当我尝试p:dataGrid它工作的文本。这可能是因为我使用了主要面孔。我怎样才能得到这个面对主要面孔? – wwjdm
''需要''。 ''必须以通常的方式工作。如果两者仍然不起作用,请确保您没有忘记'xmlns:h'和'xmlns:ui'。 –
BalusC
嗨,我有xmlns:h和xmlns:ui但它们不适用于主要面孔5.2 –
wwjdm