控制单元格样式和内容
你希望Velocity能够在view层能完全处理和控制html表格样式.另一方面, 为了动态创建表格,在java中去控制单元格样式比在模板中来得更简单而且必要。
这就是为什么我们创建cell类的原因,当然必要的时候,我们也可以混合使用模版和Java类方法去处理表格。
为了在模版中指定单元格样式,cell类提供下列方法
public void setType(String type);
public boolean isType(String type);
public Set<String> getTypes();
一个单元格可以被指定任意字符串类型。在模板中也能根据其类型去查询单元格。如下例所示
#if ( $cell.isType("mainTopic") )
<td bgcolor="blue"> $cell.name </td>
#else
<td bgcolor="red"< $cell.name </td>
#end
或者,你也可以使用cell名来满足同样的需求。当然这里只能设置1个单元名
cell提供为表格属性提供下列两个方法
public void setProperty(String key, String value);
public String getProperty(String key);
一个cell可以指定多个用于html表格的属性,比如bgcolor(前例可见),或者队列控制(align or valign),或者提示信息
设置属性代码如下:
cell.setProperty("toolTip", "Start date: Sept. 19, 2007");
使用到提示属性的模板代码如下:
<td title="$cell.getProperty("toolTip")"> $cell.name </td>
你不需要在模板中去定义那些tip信息。当然通常状况下,这些数据并不是以hardcode的方式来指定。
而从是一些数据源中来获取,比如xml配置信息,或持久层。
在动态产生表格过程中,cell内容也是一个非常重要被考虑的元素。表格单元格可以包含一些标准文本或者图形。
这些数据必须从模式层传送给模版本。cell类提供了一些方法去实现这个需求。
一般来说,单元格名属性用于传递一些文本信息。理论上,他可以支持任意长度的字符串数据。但是我们并不那么样,
我们需要保持单元格名简短扼要。特别是你使用单元格名来查询,控制显示。cell提供了下列两个方法来传递真正需要的文本信息
public void setContent(String key, Object value);
public Object getContent(String key);
我们使用key标识符来分辨每个单元格中的不同文本信息。也可以使用单元类型和属性来确保模板知道我们需要操作的单元格对象。
逻辑索引
表格类 支持逻辑索引。行、列索引号不需要一定从0开始。它能从任意整数型值开始,
所以左上角的表格能够有1个非零的逻辑索引row0和col0。 我们为表格提供下面两个构造器
public Table(int row0, int col0, int rowNumber, int colNumber);
public Table(int rowNumber, int colNumber);
第一个构造器需要指定开始行列索引row0,col0.而第二个构造器使用默认的0,0作为起始索引。
所以如果我们使用able table = new Table(5, 6, 10, 20);
那么我们将创建一个索引范围为行(5到14),列(6到25)的 表格。
然后,setter和 getter方法被限制到那些索引区间,而不是看似满足条件的 0 to 9 (10 行) and 0 to 19 (20 列)索引范围
未完待续