`
rickycm
  • 浏览: 68880 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在eXtremeComponents组件里实现列的动态显示

阅读更多
http://boogie.iteye.com/blog/47999

在我开发的一个通用查询项目中想把查询结果集的显示部分采用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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics