我决定发布一个新的里程碑(milestone)版是因为我对视图(view)的代码做了一些调整,现在eXtremeTable将能够支持AJAX(而不是局部build)。
在确认release候选版前,这些增加的大的特性能够完美地工作。
下面列出的是eXtremeTable下一个里程碑(milestone)版特性和改进,我希望从上一个里程碑版升级到现在这版没有任何问题(breakage)。
然而,在完成M4版视图实现后,我决定我必须做最后的更改...将静态builders变为具体的类。这将是唯一可能出现问题(breakage)并且
将只影响到定制视图(定制cells也一样,但是更多的是较平和的deprecated)。尽管那样,这些更改将很容易实现。
所有的视图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...
如果你要定制的就是这些东西而不需要别的新的特性,你最好等待一两个星期直到我实现完成。
TableTag新的showTitle属性用来确认是否现实title,这是一个boolean值默认为true。
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);
1.6. 新的列的filterOptions属性/FilterOption接口
TableTag新的filterOptions属性,能够接受一个filter
options的集合,这个集合中的每个bean都实现FilterOption的
接口。被用来和filterCell=droplist结合,当使用Limit时使用定制droplist时非常有用。
默认的XlsView使用UTF-16编码,这样能够支持对于双字节语言导出。如果要使用unicode,你可以设置
ExportTag的新的encoding属性,这个属性接受的值为:UTF和UNICODE。
1.8. 删除Compact视图的title的style
当使用compact视图是我硬编码了表的title,这是一个bug。只需要通过CSS的titleRow属性style(或移走)title。
TableModel现在变为接口,这只对TableAssembler产生影响。然而,正如下面提到的,使用Java代码来组装一个表将更容易。
1.10. 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();
1.11. 重命名FilterSet.getValue()方法
FilterSet.getValue()方法被Deprecated,重命名为FilterSet.getFilterValue()。
1.12. 删除TableTag的onsubmit
onsubmit被删除,因为javascript被表的所有actions使用。
PDF和XLS现在包含总计导出,你只需要和平常一样设置Calc特性。
过滤器的response头应该能更好地适应不同环境,在response头后添加:
response.setHeader("Cache-Control", "must-revalidate, post-check=0,pre-check=0");
1.15. 列标签autoGenerateColumns的Preferences
autoGenerateColumns属性现在可以在Preferences文件中配置,可以使用别名来避免全路径引用。
Registry能够接受null、String、List或者Array作为参数,Registry将把这些转换成String[]。
表的bufferView属性,默认为true将使用视图的默认buffer。如果不需要使用buffer可以设置为false。
1.18. eXtremeTable的AJAX特性
当使用eXtremeTable API来通过JAVA代码来创建表时,现在可以结合AJAX技术来生成视图。这意味着
当navigate(比如:翻页)时不需要刷新web页,这令人非常兴奋,关于这个特性的更多的文档将会出来。开发
者能够更好地测试并使用这个特性,这个特性的真正hook是表的onInvokeAction属性,它使得javascript方法
能够被invoked。AJAX整合一个最强大的地方是它不需要整合。下一步是使eXtremeTable有一个清晰并且易于使用的API,
这意味着你可以使用你感兴趣的AJAX技术因为eXtremeTable没有整合一个特定的技术。现在你可以通过CVS得到eXtremeSite代码,
它展示了一个使用AJAX的实例,它现在使用HSQL所以只需要下载并直接运行。请暂时不要向我询问更多的文档,我现在正在整理 并将尽可能快的发布出来。