幸せのちから

平凡的世界
看似平常实崎岖
成如容易却艰辛

eXtremeComponents M5 Release升级说明(A8)

       A8是eXtremeComponents正式Relese前的最后一个开发者版,现在eXtremeComponents的code工作已经全部结束,在Release之前的工作是完善eXtremeComponents的文档、指南和javadocs。所以请广大网友协助测试一下我前篇“eXtremeComponents导出时的中文文件名问题”中提到的中文文件名的问题,以便我能尽快提交,使得能够随着正式版一起Release。
       

开发者版

开发快照版

extremecomponents-1.0.1-M5-A8(下载) 是正式版发行前的最后开发快照版。这个build版所使用的代码将被下一个release版沿用。

1.0.1-M5-A8

我决定发布一个新的里程碑(milestone)版是因为我对视图(view)的代码做了一些调整,现在eXtremeTable将能够支持AJAX(而不是局部build)。 在确认release候选版前,这些增加的大的特性能够完美地工作。

下面列出的是eXtremeTable下一个里程碑(milestone)版特性和改进,我希望从上一个里程碑版升级到现在这版没有任何问 题(breakage)。 然而,在完成M4版视图实现后,我决定我必须做最后的更改...将静态builders变为具体的类。这将是唯一可能出现问题(breakage)并且 将只影响到定制视图(定制cells也一样,但是更多的是较平和的deprecated)。尽管那样,这些更改将很容易实现。

Html Builder类具体化

所有的视图builder类具体化,需要被实例化,这些只对开发者需要创建定制试图或cells有影响。 这是因为需要使得视图代码能够像他们需要的那样具有弹性。builder classes是静态的能够很好地工作,但是 将来没有机会来做一些有意义的事,并且创建定制试图更加麻烦。然而,现在这些方法和原来的一样,而仅仅是需要对它进行实例化。

为了使这种转变更容易CellBuilder仍然是静态的,但是现在为deprecated。新的(非静态)builder称为ColumnBuilder,通过这个名称我们能更确切地知道什么被构建了。

    public String getHtmlDisplay(TableModel model, Column column) {
ColumnBuilder columnBuilder = new ColumnBuilder(column);
columnBuilder.tdStart();
columnBuilder.tdBody(getCellValue(model, column));
columnBuilder.tdEnd();
return columnBuilder.toString();
}

另一个例子,使用ColumnBuilder定制cells如下:

 public String getHtmlDisplay(TableModel model, Column column) {
InputBuilder inputBuilder = new InputBuilder(column);
inputBuilder.tdStart();

try {
Object bean = model.getCurrentRowBean();
Integer id = new Integer(BeanUtils.getProperty(bean, "id"));
inputBuilder.tdBody(id);

} catch (Exception e) {}

inputBuilder.tdEnd();

return inputBuilder.toString();
}

private static class InputBuilder extends ColumnBuilder {
public InputBuilder(Column column) {
super(column);
}

public void tdBody(Integer id) {
getHtmlBuilder().input("radio").name("location.id").id("location.id").value(id.toString()).onclick("populateLocationFields(this.value)");
getHtmlBuilder().xclose();
}
}
}

这样更简洁,只需要扩展你关心的builder,并构建你定制的实现。

另外toolbar被完全重构,但是这个实现被隐藏在ToolbarBuilder类的背后,所以不会有影响。

最后,我探索性地增加了toolbar特性,这样可以在preferences配置表关联到不同的toolbars。 这个特性能够用来动态构造toolbar。这将使开发者很简单地通过preferences来定义一个定制的toolbar。 例如,一个toolbar当使用Limit定制不包含最后一页按钮,或者另一个toolbar不包含rows displayed... 如果你要定制的就是这些东西而不需要别的新的特性,你最好等待一两个星期直到我实现完成。

新的表的showTitle属性

TableTag新的showTitle属性用来确认是否现实title,这是一个boolean值默认为true。

Limit现在能使用State特性

Limit特性为了使用State特性,你需要使用TableLimitFactory的带有state的构造函数,当使用state 特性时,你应该提供唯一的tableId(本例为presidents),带有state的构造函数同时也需要这个tableId。

    Context context = new HttpServletRequestContext(request);
LimitFactory limitFactory = new TableLimitFactory(context, presidents, TableConstants.STATE_PERSIST, null);
Limit limit = new TableLimit(limitFactory);

新的列的filterOptions属性/FilterOption接口

TableTag新的filterOptions属性,能够接受一个filter options的集合,这个集合中的每个bean都实现FilterOption的 接口。被用来和filterCell=droplist结合,当使用Limit时使用定制droplist时非常有用。

导出EXCLE文件时的本地语言的支持

默认的XlsView使用UTF-16编码,这样能够支持对于双字节语言导出。如果要使用unicode,你可以设置 ExportTag的新的encoding属性,这个属性接受的值为:UTF和UNICODE。

删除Compact视图的title的style

当使用compact视图是我硬编码了表的title,这是一个bug。只需要通过CSS的titleRow属性style(或移走)title。

TableModel现在变为接口

TableModel现在变为接口,这只对TableAssembler产生影响。然而,正如下面提到的,使用Java代码来组装一个表将更容易。

TableAssembler整合到TableModel

当使用Java代码来组装一个表将更容易:

    TableModel model = new TableModelImpl(context);

Table table = new Table(model);
table.setItems(presidents);
table.setAction("assembler.run");
table.setTitle("Presidents");
table.setShowTooltips(Boolean.FALSE);
model.addTable(table);

Row row = new Row(model);
row.setHighlightRow(Boolean.FALSE);
model.addRow(row);

Column columnName = new Column(model);
columnName.setProperty("fullName");
columnName.setIntercept((AssemblerIntercept.class).getName());
model.addColumn(columnName);

Column columnNickName = new Column(model);
columnNickName.setProperty("nickName");
model.addColumn(columnNickName);

Object view = model.assemble();

重命名FilterSet.getValue()方法

FilterSet.getValue()方法被Deprecated,重命名为FilterSet.getFilterValue()。

删除TableTag的onsubmit

onsubmit被删除,因为javascript被表的所有actions使用。

总计导出

PDF和XLS现在包含总计导出,你只需要和平常一样设置Calc特性。

导出错误-Response头修改

过滤器的response头应该能更好地适应不同环境,在response头后添加:

 response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");

列标签autoGenerateColumns的Preferences

autoGenerateColumns属性现在可以在Preferences文件中配置,可以使用别名来避免全路径引用。

自动转换参数

Registry能够接受null、String、List或者Array作为参数,Registry将把这些转换成String[]。

表的bufferView属性

表的bufferView属性,默认为true将使用视图的默认buffer。如果不需要使用buffer可以设置为false。

eXtremeTable的AJAX特性

当使用eXtremeTable API来通过JAVA代码来创建表时,现在可以结合AJAX技术来生成视图。这意味着 当navigate(比如:翻页)时不需要刷新web页,这令人非常兴奋,关于这个特性的更多的文档将会出来。开发 者能够更好地测试并使用这个特性,这个特性的真正hook是表的onInvokeAction属性,它使得javascript方法 能够被invoked。AJAX整合一个最强大的地方是它不需要整合。下一步是使eXtremeTable有一个清晰并且易于使用的API, 这意味着你可以使用你感兴趣的AJAX技术因为eXtremeTable没有整合一个特定的技术。现在你可以通过CVS得到eXtremeSite代码, 它展示了一个使用AJAX的实例,它现在使用HSQL所以只需要下载并直接运行。请暂时不要向我询问更多的文档,我现在正在整理 并将尽可能快的发布出来。

表的items可以使用Map

表的Items可以使用Map(values),因此可以使用不使用Collection而使用一些key来快速构造。 这个特性正是一个eXtremeComponents使用者需要的。我想这将是一个有趣的特性所以决定在下一个release中发布!

可以定义超过一个显示的行数(rows displayed))

现在可以定义超过一个显示的行数(rows displayed)。这使得在eXtremeTable顶部和底部定义相同的工具条成为可能。

Parameter参数的更多变化

Parameter特性能更好地支持Arrays、Lists、String和其他一些具有toString()的java对象,具有toString()函数能够转换成一个String数组(array),例如:Number。

修正Export viewResolver属性没有被参照

修正Export viewResolver属性没有被真正使用的bug。这使得定制导出时不需要设置view和viewResolver为相同的命名,而可以给出ViewResolver的全路径或者在配置中配置它的别名。

修正在同一个form中使用两个eXtremeTables时导出的问题

修正在同一个form中使用两个eXtremeTables时导出的问题,现在他们能够互不干扰分别导出。我只是重新组织表实例 (instance)参数(现在命名ec_eti为导出表的id),这个参数需要被同一个form中的不同表共享,每次request时候被重新设置 (reset)。

如果form还包含其他的按钮(buttons)被条用,导出完毕后你需要调用resetExportParameters(form, action),它包含在extremecomponents.js文件中。第一个参数是当前的form,第二个参数是form的action。这个是因 为导出使用javaScript进行调用,没有别的办法重新自动reset它。 resetExportParameters做的就是将导出表的id置为空(null),并且将form action设置为原来的值。这很不幸,但是我想不出别的处理方法。

Note: 这个修正也关系到State特性。当使用State设置为persist时,导出也会出现问题。

table.imagePath配置(preference)添加上下文路径(contextPath )

如果table.imagePath的上下文路径(context path)没有在配置文件(Preferences)中指定,那么将给它自动指定一个。然而,如果路径以表示绝对路径“/”开始,将只给它提供一个上下文 (context)而上下文(contextPath)并没有插入。

使用javascript设置form的method属性

当翻页、过滤、排序时将使用javascript来设置form的method属性。以前只是设置了form的action属性,为了完整性现在也设置了form的method属性。

Bullet Proof Limit feature

如果传入不正确的数据到LimitCallback时,Limit只记录(log)并显示一个警告(warning)。

Intercept被重命名为Interceptor

intercept特性被重命名为interceptor。因此我们现在的interceptors有:TableInterceptor、 RowInterceptor、ExportInterceptor和ColumnInterceptor。他们现在在interceptor包中。遍更 的原因是intercept不如interceptor能给大家提供一种表明他们作用更好的直觉。我不向提供一种我不喜欢的命名。然而,这些方法名都一样 所以能够将他们集中到一个正确的包中。

posted on 2006-04-09 17:01 Lucky 阅读(3071) 评论(15)  编辑  收藏 所属分类: extremeComponents

评论

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-10 12:49 江南白衣

hello, 内嵌对象的排序搞好没有?
比如book.category.name 列。

因为js访问 form.category.name出错(其实form.getElementByID("category.name")就没事了),我一般设了alias="categoryName"
但最近的版本把alias而不是category.name作为排序的参数传给controller了。  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-10 13:19 xplucky

A8到A4的升级其实本质上是内部的调整(refactor),你说到的内嵌对象的排序现在应该是还没有完成。  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-10 13:21 thinkbase

支持 eXtremeComponents,, 我想Java开发就是需要这样功能强大的组件  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-10 13:32 xplucky

@thinkbase
是啊,基础打得非常好,扩展性很强,我现在有个想法: 我们的国内程序员能不能组织一下丰富一下它的外围,定制一些我们习惯的view、cell、filter...  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-10 21:36 Robin's Java World

@xplucky
这个想法不错,支持一下!
有什么行动的话,可以参与一下。  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-11 10:32 xplucky

5.1前我会比较忙,我想实时跟踪翻译Ex的文档,还有一个project也打算在5.1前Release0.1版: www.openfans.net 我的打算是在5.1后,等Ex Release后,咱们基于最新的Release来完成外围的一些定制工作。  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-11 15:25 江南白衣

无望之灾阿,以前一直正常的,用column_name排序的,忽然间就把alias用来传给controller排序了。

搞到现在所有category.name式的列都不能排序了,挺大的一个bug,对实际项目挺影响的,最好赶快改。

BTW.能拿你的MSN or QQ么:) or lucky == pesome?  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-11 15:32 xplucky

我的 MSN: zlh326@msn.com   回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-26 02:25 rombus

下了最新的m5版本把原来m4的换了,可以解决导处execl中文问题了,可是在过滤里搜索中文还是出现乱码,我已经加了post提交了,我用的是tomcat5.5  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-26 10:42 xplucky

我的经验是你得加编码过滤器,请看:
http://www.blogjava.net/lucky/archive/2006/03/31/38474.html  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-26 11:24 rombus

是 按照2. 传入中文参数乱码讲的吗?我做了还是一样,过滤里敲中文 搜索就变乱码了,哪里还不对呢?正式版里会解决中文问题吗?
  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-26 16:55 xplucky

到现在为止加了过滤器的好像这个问题都解决了,你给我mail吧。  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2006-04-29 23:43 rombus

@xplucky
rombus007@hotmail.com
  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8)[未登录] 2007-10-19 15:59 Joe

请问如何在顶部和底部都添加翻页的标签  回复  更多评论   

# re: eXtremeComponents M5 Release升级说明(A8) 2007-11-25 22:18 爱不留


你好:
我在同一页面用两个extremetable, 点下一页或者导出EXCEL时都会出错JS错误:
行:1 字元:1 錯誤:'document.forms.ec.ec_eti'是null或不是对象

请问怎么回事?
谢谢啊.
我的QQ: 334545190, 急盼您的回复!  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

随笔分类(125)

文章分类(5)

日本語

搜索

积分与排名

最新随笔

最新评论