原创作者: boogie   阅读:1985次   评论:0条   更新时间:2011-05-26    
    在我开发的一个通用查询项目中想把查询结果集的显示部分采用eXtremeComponents组件来处理,但是碰到个问题,就是组件预先并不知道查询结果的列名,也就是必须解决Column列的动态显示问题。

    有一种方法就是通过在jsp页面里罗列一下,但是总感觉不舒服,查文档发现eXtremeComponents有一接口AutoGenerateColumns可实现此功能,以下为具体实现步骤:

一、在应用的servlet(或struts action等)里(如sqlAction.do)实现根据SQL语句的运行结果获取字段名称列表(fieldnames)和查询结果集(results)并将其放入httpRequest的属性中
List fieldnames = 实现[获取字段名称列表]方法;
List results = 实现[获取查询结果集]方法;
httpRequest.setAttribute("fieldnames", fieldnames);
httpRequest.setAttribute("results", results);

results将作为eXtremeTable组件中属性items的值,fieldnames将用来迭代构造Column对象

二、编写类AutoGenerateColumnsImpl实现org.extremecomponents.table.core.AutoGenerateColumns接口
package org.boogie.sql.common.ec;

import java.util.Iterator;
import java.util.List;

import org.extremecomponents.table.bean.Column;
import org.extremecomponents.table.core.AutoGenerateColumns;
import org.extremecomponents.table.core.TableModel;

public class AutoGenerateColumnsImpl implements AutoGenerateColumns {

	public void addColumns(TableModel model) {
		List fieldnames = (List) model.getContext().getRequestAttribute(
				"fieldnames");
		Iterator iterator = fieldnames.iterator();
		while (iterator.hasNext()) {
			String fieldname = (String) iterator.next();
			Column column = model.getColumnInstance();
			column.setProperty(fieldname);
			// column.setCell((String) columnToAdd.get(CELL));
			model.getColumnHandler().addAutoGenerateColumn(column);
		}
	}
}

AutoGenerateColumns接口只有一个方法addColumns供实现,在此方法中通过传入的TableModel型参数model可从其Context中获取到httpRequest中的fieldnames属性值,然后根据fieldnames列表迭代构造对应Column后添加到model中

三、在显示页文件的eXtremeTable中,配置TableTag的属性items值为results,配置ColumnTag的属性autoGenerateColumns值为类AutoGenerateColumnsImpl的全路径
<ec:table 
		items="results"
		var="result"
		action="${pageContext.request.contextPath}/sqlAction.do"
		imagePath="${pageContext.request.contextPath}/images/table/*.gif"
		title="查询结果"
		width="100%"
		rowsDisplayed="5"
		>
  <ec:parameter name="method" value="ec"/>
  <ec:row>
	<ec:columns autoGenerateColumns="org.boogie.sql.common.ec.AutoGenerateColumnsImpl"/>
  </ec:row>
</ec:table>
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

  • fins在2007-01-17创建
  • fins在2011-05-26更新
Global site tag (gtag.js) - Google Analytics