Primefaces数据表仅将数据组合在一行中

时间:2015-05-23 13:41:11

标签: jsf primefaces datatable

我正在使用tomcat8和primefaces 5.1,我有以下代码:

<p:dataTable var="price" value="#{HOTEL.hotel}">

<p:column headerText="Тип стая">
<h:outputText value="Единична" />
<h:outputText value="Двойна" />
<h:outputText value="Апартамент" />
<h:outputText value="Студио" />
</p:column>

<p:column headerText="Брой">
<h:outputText value="#{HOTEL.hotel.room_1}" />
<h:outputText value="#{HOTEL.hotel.room_2}" />
<h:outputText value="#{HOTEL.hotel.apartment}" />
<h:outputText value="#{HOTEL.hotel.studio}" />
</p:column>

<p:column headerText="Цена">
<h:outputText value="#{HOTEL.hotel.room_1_price}" />
<h:outputText value="#{HOTEL.hotel.room_2_price}" />
<h:outputText value="#{HOTEL.hotel.apartment_price}" />
<h:outputText value="#{HOTEL.hotel.studio_price}" />
</p:column>

</p:dataTable>

当使用上面的代码时,我得到的只有一行的表和一行中的所有数据对于每个outputText都没有不同的行,正如我想的那样。我想要4行,其中包含适当的数据。我希望第一列与硬编码值一样,然后为每个列提供数据库中的相应值。

1 个答案:

答案 0 :(得分:3)

您以错误的方式使用dataTable组件。它只是在表格视图中显示数据,而你应该做的唯一事情就是为它提供一个Collection模型对象,并明确告诉来自模型实例的哪个属性应该显示在某一列下。

另外,我相信你的模型中有一些问题,即房间的类型(“单一”,“双”等)应该是房间定义的一部分,但不是{{1列。同样适用于房间的价格。此外,dataTable应包含hotel个房间。

因此,您可以引入一个名为Collection的课程,该课程将保留酒店房间的属性。

Room

然后,在enum RoomType { SINGLE, DOUBLE, APPARTMENT, STUDIO; } class Room { private RoomType type; private Double price; //constructors, accessors, etc. } bean中,您应该有hotelCollection个对象,每个对象都会提供有关价格和房间类型的信息。此外,Room负责为特定类型的房间提供可用性,这就是为什么它应该暴露更多方法。类似的东西:

hotel

最后,在public class Hotel { private List<Room> rooms; public Integer checkAvailabilityFor(RoomType type) { //for example switch (type) { case SINGLE: { return 5; } case DOUBLE: { return 2; } case APPARTMENT : { return 1; } case STUDIO: { return 3; } } } //accessor(s) for the rooms list } 组件中,您可以使用以下内容:

dataTable