如何在JSP上显示带有动态列标题的列表?

时间:2011-10-25 04:26:45

标签: java jsp iteration

以下是我的代码

    class Entity 
{
    private int id;
    private String entityName;

    private List<Property> properties;

    // other properties and getters and setters
}

class Property 
{
    private int id;
    private String propertyName;
    private String propertyValue;

    // other properties and getters and setters
}


List<Entity> entities = new ArrayList<Entity>();

// ---- Entity 1
Entity entity1= new Entity();
entity1 . setEntityName("Person");

Property property1 = new Property();
property1 .setPropertyName("FirstName");
property1 .setPropertyValue("Peter");


Property property2 = new Property();
property2 .setPropertyName("LastName");
property2 .setPropertyValue("Pan");

Property property3 = new Property();
property3 .setPropertyName("Age");
property3 .setPropertyValue("28");


entity1.getProperties().add(property1);
entity1.getProperties().add(property2);
entity1.getProperties().add(property3);

entities.add(entity1);

// ---- Entity 2
Entity entity2= new Entity();
entity2 . setEntityName("Location");

Property property1 = new Property();
property1 .setPropertyName("Address");
property1 .setPropertyValue("302 New york Street");


Property property2 = new Property();
property2 .setPropertyName("City");
property2 .setPropertyValue("New york");


Property property3 = new Property();
property3 .setPropertyName("Country");
property3 .setPropertyValue("US");

entity2.getProperties().add(property1);
entity2.getProperties().add(property2);
entity2.getProperties().add(property3);

entities.add(entity2);

我需要在JSP上显示它如下

    Person 

    Firstname       LastName        Age

    Peter           Pan             28
    Van             helsing         50
    Tom             Williamson      35


    Location

    Address                 City            Country

    302 New York Street     New York        US
    Highway Street          Londona         UK

我遇到的问题是每个实体都有不同的属性(属性和名称的数量各不相同)。

我正在为每个迭代使用JSTL c。请帮我。

编辑1: -

对于单个列表,我会做类似下面的事情。

    <tr>
    <th>Heading 1</th>
    <th>Heading 2</th>
    <th>Heading 3</th>
</tr>


<tr>
<c:forEach items="${list}" var="item">
    <td>${item.property1}</td>
    <td>${item.property2}</td>
    <td>${item.property3}</td>
</c:forEach>
</tr>

如果你看到上面我的标题不是迭代。但在我的情况下,我将把我的标题放在列表中。

1 个答案:

答案 0 :(得分:0)

只要实体已按其“类型”分组,只需获取集合中的第一项,迭代其属性,然后显示属性名称。

然后迭代整个实体列表,仅显示每个实体的属性值。

如果 已按实体“类型”分组,则您需要按entityName对其进行排序,并按照上述相同步骤进行排序。唯一的区别是,当您遍历实体时,您必须跟踪上一个实体的类型。当前实体的类型与前一个实体的类型不同时,显示新标题并继续。