2015-07-10 167 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