和查询区相比,数据区有表头,数据是多行,还有相关的统计行和分页行,统计行和分页行的输出位置可自己定义。
数据区的生成步骤包括数据生成、表头定义和数据列定义,和查询区表格类似但是要复杂一点。
以《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是分页行输出类,这个功能稍微复杂一点,后面专门介绍。