Jsf Primefaces datatable仅在一行中组合数据

Jsf Primefaces datatable仅在一行中组合数据,jsf,primefaces,datatable,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="Апартамент" /> &

我使用的是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行和其中的适当数据。我希望第一列与硬编码的值保持一致,然后为它们中的每一列提供来自数据库的相应值。

您以错误的方式使用了
dataTable
组件。它只是在表格视图中显示数据,您要做的唯一一件事是向它提供模型对象的
集合
,并明确指出模型实例中的哪个属性应该显示在某一列下

此外,我相信您的模型中存在一些问题,即房间类型(“单人房”、“双人房”等)应该是房间定义的一部分,但不能在
数据表
列中硬编码。房间的价格也是如此。此外,
酒店
应包括
房间集合

因此,您可以引入一个名为
Room
的类,它将保存酒店房间的属性

enum RoomType {
    SINGLE, DOUBLE, APPARTMENT, STUDIO;
}

class Room {
    private RoomType type;

    private Double price;

    //constructors, accessors, etc.
}
然后,在
hotel
bean中,您应该拥有
房间
对象的
集合,每个对象都将提供有关房间价格和类型的信息。此外,提供给定类型房间的可用性将是
酒店的责任,这就是为什么它应该公开更多方法的原因。比如:

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
}
<p:dataTable var="room" value="#{HOTEL.hotel.rooms}">

    <p:column headerText="Type">
        <p:outputText value="#{room.type}" />
    </p:column>

    <p:column headerText="Rooms available">
        <p:outputText value="#{HOTEL.hotel.checkAvailabilityFor(room.type)}" />
    </p:column>

    <p:column headerText="Price">
        <p:column value="#{room.price}" />
    </p:column>

</p:dataTable>

我强烈建议您暂停当前的项目,花时间阅读一本理智的JSF书籍/教程,以便正确掌握基本概念。是的,我知道,但我有一个截止日期,因为这是大学的项目。在这里发帖之前,我总是通过网络阅读。我真的很感谢像你这样的人的帮助。非常感谢你。