我正在使用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行,其中包含适当的数据。我希望第一列与硬编码值一样,然后为每个列提供数据库中的相应值。
答案 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中,您应该有hotel
个Collection
个对象,每个对象都会提供有关价格和房间类型的信息。此外,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