原创作者: boogie
阅读:1985次
评论:0条
更新时间:2011-05-26
在我开发的一个通用查询项目中想把查询结果集的显示部分采用eXtremeComponents组件来处理,但是碰到个问题,就是组件预先并不知道查询结果的列名,也就是必须解决Column列的动态显示问题。
有一种方法就是通过在jsp页面里罗列一下,但是总感觉不舒服,查文档发现eXtremeComponents有一接口AutoGenerateColumns可实现此功能,以下为具体实现步骤:
一、在应用的servlet(或struts action等)里(如sqlAction.do)实现根据SQL语句的运行结果获取字段名称列表(fieldnames)和查询结果集(results)并将其放入httpRequest的属性中
results将作为eXtremeTable组件中属性items的值,fieldnames将用来迭代构造Column对象
二、编写类AutoGenerateColumnsImpl实现org.extremecomponents.table.core.AutoGenerateColumns接口
AutoGenerateColumns接口只有一个方法addColumns供实现,在此方法中通过传入的TableModel型参数model可从其Context中获取到httpRequest中的fieldnames属性值,然后根据fieldnames列表迭代构造对应Column后添加到model中
三、在显示页文件的eXtremeTable中,配置TableTag的属性items值为results,配置ColumnTag的属性autoGenerateColumns值为类AutoGenerateColumnsImpl的全路径
有一种方法就是通过在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 条 请登录后发表评论