和查詢區相比,數據區有表頭,數據是多行,還有相關的統計行和分頁行,統計行和分頁行的輸出位置可自己定義。
數據區的生成步驟包括數據生成、表頭定義和數據列定義,和查詢區表格類似但是要複雜一點。
以《3 頁面設計》中的數據區爲例:
//建立顯示數據
Result listResult = new Result();
for (int i=0;i<retList.size();i++)
{
QryRecord record = retList.getQryRecord(i);
Record listRecord = new Record();
listRecord.add(PageProc.getSerialNum(request,i));
listRecord.add(record.get("SPD_TestTime"));
listRecord.add(record.get("SPD_DepName"));
listRecord.add(record.get("SPD_UserName"));
listRecord.add(record.get("SPD_Url"));
listRecord.add(record.get("SPD_AllTime"));
listRecord.add(record.get("SPD_ServerTime"));
listRecord.add(SpeedRecord.getSpeedLevel(record));
listResult.add(listRecord);
}
//建立顯示數據完成
JspSimpleDataTableManager manager = new JspSimpleDataTableManager(out,request);//生成類
//設置顯示的數據
retInfo.ret = listResult;
manager.setRetInfo(retInfo);
manager.addTextField("序號",Type.INT_TYPE);//設置標題和數據的類型
int index = 0;
//通過順序號設置屬性
manager.setHeadTdPropertyValue(index,"height","26");//設置數據區表格行高,只設置一行,文件更小
manager.setHeadTdPropertyValue(index,"width","10%");//設置表格數據寬度
manager.setDataTdPropertyValue(index,"align","center");//設置表格數據對齊方式
TableHeadField headField = manager.createHeadField(" 時 間 "); //定義標頭
headField.setOrderByField("SPD_TestTime"); //設置標頭排序
headField.setTdPropertyValue("width","15%"); //設置td寬度
TableDataField dataField = manager.createDataField("SPD_TestTime",Type.STRING_TYPE,TableDataField.TEXT);//定義數據值
headField = manager.createHeadField(" 部 門 ");
headField.setOrderByField("SPD_DepName");
headField.setTdPropertyValue("width","15%");
dataField = manager.createDataField("SPD_DepName", Type.STRING_TYPE,TableDataField.TEXT);
headField = manager.createHeadField(" 用 戶 ");
headField.setOrderByField("SPD_UserName");
headField.setTdPropertyValue("width","15%");
dataField = manager.createDataField("SPD_UserName", Type.STRING_TYPE,TableDataField.TEXT);
headField = manager.createHeadField("測試類型");
headField.setOrderByField("SPD_Url");
headField.setTdPropertyValue("width","10%");
dataField = manager.createDataField("SPD_Url", Type.STRING_TYPE,TableDataField.TEXT);
headField = manager.createHeadField("時間(毫秒)");
headField.setOrderByField("SPD_AllTime");
headField.setTdPropertyValue("width","10%");
dataField = manager.createDataField("SPD_AllTime", Type.STRING_TYPE,TableDataField.TEXT);
dataField.setStatType(TableDataField.STAT_TYPE_SUM);// 進行合計
headField = manager.createHeadField("服務端(毫秒)");
headField.setOrderByField("SPD_ServerTime");
headField.setTdPropertyValue("width","15%");
dataField = manager.createDataField("SPD_ServerTime", Type.STRING_TYPE,TableDataField.TEXT);
dataField.setStatType(TableDataField.STAT_TYPE_SUM);// 進行合計
headField = manager.createHeadField(" 網 速 ");
headField.setTdPropertyValue("width","10%");
dataField = manager.createDataField("", Type.STRING_TYPE,TableDataField.TEXT);
//生成統計行
Record statRecord = manager.createStatRecord();
manager.setDataFieldStatType(0,TableDataField.STAT_TYPE_TEXT);
statRecord.set(0,"小計");
manager.setOutStatType(manager.STAT_OUT_DOWN);
manager.setOutStatRecord(statRecord);
//生成統計行結束
PageNoAndTableManager pageNoAndTableManager = new PageNoAndTableManager(manager);//分頁行輸出類
pageNoAndTableManager.setOutPageNoLineType(pageNoAndTableManager.LINE_OUT_UPDOWN);//上下都輸出分頁行
pageNoAndTableManager.outHtml();//輸出數據
用到的新的方法:
/**
* 設置排序的字符串(數據庫字段名)
* @param orderByName 排序的字符串(數據庫字段名)
*/
public void setOrderByField(String orderByName)//點擊標題可以排序,先遞增、後遞減,交替設置
/**
* 建立一個標題字段
* @param title 標題顯示的內容
* @return 標題字段
* @throws java.lang.Exception
*/
public TableHeadField createHeadField(String title) throws Exception
/**
* 建立一個列控制字段
* @param name 名字
* @param type 對應列的數據類型
* @param displayType 顯示類型
* @return 列字段
* @throws java.lang.Exception
*/
public TableDataField createDataField(String name,int type, int displayType) throws Exception
/**
* 設置數據TD屬性的值
* @param index 順序號
* @param key 屬性(小寫)
* @param value 表屬性的默認值
* @throws java.lang.Exception
*/
public void setDataTdPropertyValue(int index,String key,String value) throws Exception
/**
* 設置數據屬性的值
* @param index 順序號
* @param key 屬性(小寫)
* @param value 表屬性的默認值
* @throws java.lang.Exception
*/
public void setDataPropertyValue(int index,String key,String value) throws Exception
設置數據屬性的值和設置數據TD屬性的值的方法有點象,注意不要混用。
/**
* 設置數據列的統計類型
* @param statType 統計類型
*/
public void setStatType(int statType)//TableDataField.STAT_TYPE_SUM表示求和
關於統計:
統計行的生成過程是先生成統計記錄,然後根據需要進行修改,並設置輸出方式,最後交給生成類輸出。
PageNoAndTableManager是分頁行輸出類,這個功能稍微複雜一點,後面專門介紹。