Map、数组以及dataTable的结合使用

来源:互联网 发布:网络聊天室开发 编辑:程序博客网 时间:2024/05/16 05:36

一、问题背景

  本文主要介绍如何讲数组里的数据封装在map里,然后利用dataTable显示在页面上。本文所用的工程例子是JSF框架的。
主要思路是将对象(car)的信息封装在一个一维数组中,由于有多个car对象(放在list中),所以讲该list里的对象
封装在二维数组中,并利用map的键值(car的id)来控制一维数组(每天个car的信息)在前台(dataTable)中显示出来。

二、具体代码

1.back bean 代码

public class CarReportBean {
   
    private List<Car> cars=new ArrayList<Car>();
    private String[][] carsInfo;
    private Map<Integer, String[]> carReportsMap=new HashMap<Integer, String[]>();
   
    public void getCarReportsMap(){

        Transaction tx=HibernateUtil.getSessionFactory().getCurrentSession()
        .beginTransaction();
       
        cars.clear();
        carReportsMap.clear();

        CarHibernateDAO dao=new CarHibernateDAO();
        cars=dao.dao.findAll();

        carsInfo=new int[cars.size()][4];
       
        //封装每个car的信息到数组中
        for(int i=0;i<cars.size();i++){
           
            carsInfo[i][0]=cars.get(i).getCarId();
            carsInfo[i][1]=cars.get(i).getCarName();
            carsInfo[i][2]=cars.get(i).getCarType();
            carsInfo[i][3]=cars.get(i).getCarPrice();
           
        }

        Car car;       
        //建立键值对的关系在map中
        for(int i=0;i<cars.size();i++){
            car=cars.get(i);
            carReportsMap.put(car.getId(), carsInfo[i]);
        }

        HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
    }
}

2.页面代码:
   
    <h:panelGrid columns="4" styleClass=""rowClasses="" columnClasses="">

        <h:outputText value="Car Id"/>
        <h:outputText value="Car Name"/>
        <h:outputText value="Car Type"/>
        <h:outputText value="Car Price"/>

    </h:panelGrid>

    <t:dataTable id="statusTable1" var="car" value="#{CarReportBean.cars}" styleClass=""   
        cellpadding="0" cellspacing="0" border="0" style="  columnClasses="" rowClasses="" >

        <t:column>
            <h:outputText value="#{CarReportBean.carReportsMap[car.id][0]}"/>
        </t:column>

        <t:column>
            <h:outputText value="#{CarReportBean.carReportsMap[car.id][1]}"/>
        </t:column>

        <t:column>
            <h:outputText value="#{CarReportBean.carReportsMap[car.id][2]}"/>
        </t:column>

        <t:column>
            <h:outputText value="#{CarReportBean.carReportsMap[car.id][3]}"/>
        </t:column>
    </t:dataTable>

3.结果

    页面上会出现一个表格,每行会显示汽车的id,name,型号和价格

三、备注

   值得注意的是,如果panelGrid与dataTable用同样的CSS来规定列和行的style,那么两个表格的style可以完全相同,
每个单元格里面的内容也可以彼此对齐


    另外,本文只是用了一个简单的例子说明如何利用map使二维数组显示出来,当然就例子本身而言,有更简单的方法。
本文之所以用麻烦的办法,目的在于为了显示Map的特点与使用技巧,希望读者可以从中找到自己
可以利用的逻辑,来完成自己的需要。

原创粉丝点击