【问题标题】:Primefaces datatable combine data in only one rowPrimefaces 数据表仅在一行中合并数据
【发布时间】:2015-08-05 11:04:57
【问题描述】:

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

【问题讨论】:

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

标签: jsf primefaces datatable


【解决方案1】:

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

另外,我相信您的模型存在一些问题,即房间类型(“单人”、“双人”等)应该是房间定义的一部分,但不能硬编码在 dataTable柱子。房间的价格也是如此。此外,hotel 应包含 Collection 的房间。

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

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

class Room {
    private RoomType type;

    private Double price;

    //constructors, accessors, etc.
}

然后,在hotel bean 中,您应该有一个CollectionRoom 对象,每个对象都将提供有关价格和房间类型的信息。此外,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 组件中,您将拥有类似的内容:

<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>

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 2015-07-10
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2014-10-08
    • 2013-09-15
    相关资源
    最近更新 更多