2015-07-10 169 views
1

在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>它的工作原理。

而且,我返回集而不是一个列表,所以我只好用指定者()

回答

1

你可以嵌套另一个迭代组件一样,你可以窝在普通的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()}" ...> 
+0

您好,我试过UI:重复和h:dataTable的,但他们不会显示#{wash.foo }当我尝试p:dataGrid它工作的文本。这可能是因为我使用了主要面孔。我怎样才能得到这个面对主要面孔? – wwjdm

+0

''需要''。 ''必须以通常的方式工作。如果两者仍然不起作用,请确保您没有忘记'xmlns:h'和'xmlns:ui'。 – BalusC

+0

嗨,我有xmlns:h和xmlns:ui但它们不适用于主要面孔5.2 – wwjdm