为了替代硬编码eXtremeTable使用的默认属性值,我在属性文件中配置所有用到的属性。
如果你需要覆盖任何默认的设置,你可以创建自己的extremecomponents.properties文件 并设置你想改变的值。
为了设置属性文件,你应该如下例所示在/WEB-INF/web.xml文件中声明一个context-param,并 指定你的属性文件的路径:
<context-param>
<param-name>extremecomponentsPreferencesLocation</param-name>
<param-value>/org/extremesite/resource/extremecomponents.properties</param-value>
</context-param>
你可以认为属性文件为你提供了一个对所有的eXtremeTables声明全局设置的一个方法。
创建属性文件的最大好处就是避免在标签中复制、粘贴相同的属性。典型的extremecomponents.properties文件如下所示:
table.imagePath=/extremesite/images/*.gif
table.rowsDisplayed=12
column.parse.date=yyyy-MM-dd
column.format.date=MM/dd/yyyy
column.format.currency=$###,###,##0.00
在属性文件定义的TableTag使用最多的两个属性是:imagePath和rowsDisplayed。如果你不在属性文件中声明
这些属性,你需要在每个eXtremeTable中添加他们。典型的表如下所示:
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/presidents.run"
imagePath="${pageContext.request.contextPath}/images/*.gif"
rowsDisplayed="12"
title="Presidents"
>
...
</ec:table>
如果在属性文件声明imagePath和rowsDisplayed,则表如下所示:
<ec:table
items="presidents"
action="${pageContext.request.contextPath}/presidents.run"
title="Presidents"
>
...
</ec:table>
正如你所见,属性文件避免了重复编码。
在属性文件定义的ColumnTag使用最多的两个属性是:parse和format。如果你不在属性文件中声明
这些属性,你需要在每个eXtremeTable中添加他们。典型的列使用日期cell如下所示:
<ec:column property="dateOfBirth" cell=”date” parse=”yyyy-MM-dd” format=”MM/dd/yyyy”/>
如果在属性文件声明parse和format,则列如下所示:
<ec:column property="dateOfBirth" cell=”date”/>
当然你仍然可以定义parse和format属性来覆盖全局设置,但是大多数工程对于日期使用一致的parse
和format。需要注意属性文件中parse.date和format.date的声明语法。
下例为使用货币cell的典型列:
<ec:column property="salary" cell=”currency” format=”$###,###,##0.00”/>
如果在属性文件声明format,则列如下所示:
<ec:column property="salary" cell=”currency”/>
另外,你可以声明一个定制的format并在列中通过使用列的basis来使用它,我把这想象为named属性。因此如果你的
extremecomponents.properties文件如下所示:
table.format.myCustomDate=yy-MM-dd
那么列可以如下使用定制的format:
<ec:column property="dateOfBirth" cell="date" format=”myCustomDate”>
10.4. Advanced
Techniques
使用named属性是我定义其他不同属性默认值时经常使用的方法。你可能对我
使用cell="date"来指定日期cell、使用cell="currency"来指定货币cell或使用view="xls."来指定xls导出感到疑惑。
如果我给你展示extremetable.properties文件的一些片断,这些就将非常清晰了。 extremetable.properties是eXtremeTable声明默认设置的属性文件,你可以通过使用
extremecomponents.properties文件来覆盖它。
column.cell.date=org.extremecomponents.table.cell.DateCell
column.cell.currency=org.extremecomponents.table.cell.NumberCell
column.filterCell.droplist=org.extremecomponents.table.cell.FilterDroplistCell
table.view.xls=org.extremecomponents.table.view.XlsView
当你在列上定义cell="date"时,eXtremeTable寻找到column.cell. 属性并将你定义的cell属性值拼接上。
换句话说cell="date"关联到column.cell.date=org.extremecomponents.table.cell.DateCell这条属性。使用属性文件
真正强大的地方在于你能够在extremecomponents.properties文件中声明一个定制的cell,并在ColumnTag中通过
名称来使用它。
再使用一个实例来阐明这一点,是否记得ColumnTag章Cell节中如何调用一个名为MyCell的定制cell:
<ec:column property="firstName" cell="com.mycompany.cell.MyCell"/>
cell使用的更好方式是在属性文件中声明并通过名称使用它。首先,更新extremecomponents.properties文件:
table.imagePath=/extremesite/images/*.gif
table.rowsDisplayed=12
table.cellspacing=2
column.parse.date=yyyy-MM-dd
column.format.date=MM/dd/yyyy
column.format.currency=$###,###,##0.00
column.cell.myCell=com.mycompany.cell.MyCell
现在可以通过名称调用MyCell:
<ec:column property="firstName" cell="myCell"/>
正如你所见的这能帮助保持代码清洁,并且这些都在一个地方定义。如果你的定制cell声明 需要改变你只需要修改属性文件。