[ECSide] ECSide的列设置可以是动态的吗?

wplqw 2007-06-08
fin,你好:
   我用了你的ecside控件,觉得不错,但是有这样个需求,我的查询结果列的个数,顺序甚至是列格式都是动态的,用户在查询设置里面选那些字段,就显示那些字段,请问ecside有直接支持这样的吗?如果没有,我建议在标签上添加一个list属性,然后从request里面取出一个column设置类型的list.最好甚至可以在java后台全新生成一个ecside对象,压入request中,再生成tag,因为你也知道,客户需求有时候很变态的,什么都是动态.
karisen 2007-06-08
eXtremeComponents有这个预留接口,不知道ecside是否提供;没试过呵呵。请看:
——————>

在一个通用查询项目中想把查询结果集的显示部分采用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);  
应用示例:


<%@page contentType="text/html; charset=GBK"%>
<%@page import="java.util.*"%>
<%@taglib uri="/WEB-INF/extremecomponents.tld" prefix="ec"%>
<html>
<head>
<title>AutoGenerateColumnsName</title>
<link rel="stylesheet" type="text/css" href="/oblog312/css/extremecomponents.css"/>
</head>
<body bgcolor="#ffffff">
<h1>JBuilder Generated JSP</h1>
<%
  List goodss = new ArrayList();
  for (int i = 1; i <= 10; i++) {
    Map goods = new java.util.HashMap();
    goods.put("代码", "A00" + i);
    goods.put("名称", "面包" + i);
    goods.put("状态", "A:valid");
    goods.put("出生日期", new Date());
    goodss.add(goods);
  }
 
  List columns = new ArrayList();
  columns.add("代码");
  columns.add("名称");
  columns.add("状态");
  columns.add("出生日期");
 
  List fieldnames = columns; //实现[获取字段名称列表]方法;
  List results = goodss; //实现[获取查询结果集]方法;
  request.setAttribute("fieldnames", fieldnames);
  request.setAttribute("results", results);
%>
<ec:table items="results" var="result" action="${pageContext.request.contextPath}/AutoGenerateColumnsName.jsp" imagePath="${pageContext.request.contextPath}/images/table/*.gif" title="查询结果" width="100%" rowsDisplayed="5">
  <ec:parameter name="method" value="ec"/>
  <ec:row>
    <ec:columns autoGenerateColumns="com.itorgan.tags.extreme.AutoGenerateColumnsImpl"/>
  </ec:row>
</ec:table>
</body>
</html>
wplqw 2007-06-08
谢谢楼上的,我再仔细看看ecside的文档和代码.
appleIIappleII 2007-06-09
我也关心这个问题,不过我没有看明白楼上的帖子,希望有一个比较清楚的解决办法,谢谢!
appleIIappleII 2007-06-09
<code>
<%
String columnTitles="编号,用户名,密码,EMAIL";
String columnWidths="10%,30%,30%,30%";

String[] columnPropertys=new String[]{"USERID","USERNAME","PASSWD","EMAIL"};
// "FIELD_NAMES" 是关键字 不能改变 ,如果想使用不同的
// 你可以自己编写 org.ecside.core.bean.AutoGenerateColumnsImpl实现
request.setAttribute("FIELD_NAMES",columnPropertys);
%>
</code>
这是ecside例子中的code,但我有几个问题没有搞清楚,希望大家能解惑
1、既然列是动态的,我又怎么能知道columnTitles中的内容
2、同样的原因,又怎么能知道columnPropertys中的内容

希望fins能解答,谢谢!
fins 2007-06-10
动态肯定是根据一些已知条件来确定的

例如链接的不同 或者提交的参数不同

你总是会想办法拼装出  columnTitles columnPropertys的啊
wplqw 2007-06-12
感谢各位关注,通过对esside代码的研究,
发现可以通过以下方法实现简单的动态
1.首先在标签里面设置
<ec:columns autoGenerateColumns="org.ecside.core.bean.AutoGenerateColumnsImpl"/> 
注意:原来的固定列设置部分要删除,否则有冲突

2.然后将字段名逗号分割串压入
req的ECSideConstants.TABLE_FILEDS_KEY,
title逗号分割串压入ECSideConstants.TABLE_TITLES_KEY
宽度逗号分割串压入ECSideConstants.TABLE_WIDTHS_KEY

这样,就可以动态显示sql中的字段了,

更多设置可以查看org.ecside.core.bean.AutoGenerateColumnsImpl这个类

vision2000 2007-09-18
wplqw 写道
感谢各位关注,通过对esside代码的研究,
发现可以通过以下方法实现简单的动态
1.首先在标签里面设置
<ec:columns autoGenerateColumns="org.ecside.core.bean.AutoGenerateColumnsImpl"/> 
注意:原来的固定列设置部分要删除,否则有冲突

2.然后将字段名逗号分割串压入
req的ECSideConstants.TABLE_FILEDS_KEY,
title逗号分割串压入ECSideConstants.TABLE_TITLES_KEY
宽度逗号分割串压入ECSideConstants.TABLE_WIDTHS_KEY

这样,就可以动态显示sql中的字段了,

更多设置可以查看org.ecside.core.bean.AutoGenerateColumnsImpl这个类




请给我个例子,谢谢!
mymail_lyp@163.com
lizhengfa 2008-09-03
可以给我一个列子不呢?谢谢  lizhengfa129@163.com
lgdlgd 2008-09-27
下不到源码,只有不断的尝试,发现ECSideConstants.TABLE_TITLES_KEY是要字任串数组才行,即getRequest().setAttribute(ECSideConstants.TABLE_TITLES_KEY, new String[]{"1","2","3","4"});
但是试了很多遍,值和列宽都出不来...
Global site tag (gtag.js) - Google Analytics