Dorado on the way
2007年1月1日
关于Dataset
可以通过RecordIterator 对dataset中的数据进行遍历(包括已经在客户端“删除”的记录)。
为什么在客户端已经“删除”的记录,dataset仍然可以遍历到?
原因就在于Dorado出于对性能的考虑,在客户端做的删除并没有立刻更新服务器段的记录,而仅仅是在客户端的dataset中做了删除的标记。在用户提交了以后,才会对服务器端的记录做修改。所以用户在客户端做的删除操作后,如果刷新页面,删除的记录将会重新出现。
可以通过如下代码对dataset中已经标记为“删除”的记录进行遍历:
1RecordIterator rit = dataset.recordIterator() ; // 获取dataset的遍历器
2
3 rit.setVisibility(Dataset.FILTER_DELETED) ; // 设置遍历器的可见属性
4
5 while(rit.hasNext()){
6
7 Record record = rit.nextRecord() ; // 取得当前的Record对象
8
9 // 对记录进行操作
10
11 }
12
isFirst 以及 isLast的理解
在dataset中容易犯下的错误就是对isFirst和isLast的误解。
isFirst和isLast并不像大家想象当中的那样,代表着Dataset的当前记录(注意,所有对Dataset的操作,都是对“当前记录”而言)是否是第一条记录或者是最后一条记录。他们真正的含义如下:
isFirst:
官方解释:
isFirst表示Dataset已经在试图继续向前移动当前记录的过程失败,亦即当dataset的当前记录从第二条记录转到第一条记录时isFirst仍然是false,只有当Dataset试图继续向前移动当前记录后,isFirst才会变成 true,此时dataset的当前记录仍然是第一条记录。
我的理解:
对于isFirst,你可以于Java当中的Iterator作对比。我们假设Java中的 Iterator具有previous(),就是next()倒着遍历(),那么当当前记录从第二条作previous()成功到达第一条记录的时候,isFirst仍然返回false,为什么?因为在移动过程中没有受阻,它成功的前移了。下面要注意了,现在当前记录已经在第一条了,现在如果当前记录再试图向前移动时,此时受阻了,因为在当前记录前面已经没有记录可以移动了,此时 isFirst()返回true。
如下图:
在dorado的设计过程中,数据导航条的数据前移和后移过程中,并不会查看当前记录是否是第一条或者是最后一条数据,而是默认前或者后还有数据,从而继续作向前或向后的操作,只有在移动受阻后,才修改是否到边界的标记,这样或许在移动操作中可能会对移动的性能有一定的帮助。
个人认为,这里把isFisrt()看作是对当前记录的操作时候“越界”的标志更为合适。
IsLast:
官方的解释:
isLast表示Dataset已经在试图继续向后移动当前记录的工程失败,亦即当dataset试图继续向前移动当前记录后,isFirst才会变为true,此时 Dataset的当前记录仍然是倒数第一条记录。
我的理解:
可以对比isFirst来理解,我觉得我已经解释的比较清楚了。
moveFirst 和 moveLast方法
当用户调用了Dataset的moveFirst或moveLast之后,Dataset的isFirst或isLast立刻被置为true。
当dataset没有任何可见记录的时候,isFirst和isLast将同时为true,并且当前记录为null。
想必在前面理解了我对isFirst和isLast的讲解之后,对这两个方法的理解应该不会出现什么偏差了。
不过我想提醒大家一下,注意我这里的用词,是“可见记录”,即是说,如果在客户端删除了所有的记录,虽然没有向服务器提交,
但此时isFirst和isLast都会同时返回true。这里就很好的统一了对用户的“体验一致性”,即用户认为已经没有数据了。
不知道大家有没有在浏览器中查看过Dorado生成的jsp文件的源代码,其实这些源代码都是通过html和xml界面模板信息共同展现的。
Dorado内部加载顺序:
第一步: 客户端发出请求
第二步:初始化 视图模型
第三步:初始化 Dataset
第四步:初始化 组件
第五步:完成组件与Dataset之间的绑定
第六步: Dataset向外部请求数据,完成数据加载
第七步:向客户端返回HTML/XML界面模板信息
第八步:完成,显示页面
Dataset中最重要的方法: flushData()
功能我想我不说大家也知道,就是通过不刷新页面来实现数据更新与交换。
未完待续。。。