???
???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能給大家提供一種表明他們作用更好的直覺。我不向提供一種我不喜歡的命名。然而,這些方法名都一樣
所以能夠將他們集中到一個正確的包中。
0
0