?

Dorado on the way

200711



關于Dataset


  1. 可以通過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

?

  1. isFirst 以及 isLast的理解

    dataset中容易犯下的錯誤就是對isFirstisLast的誤解。

    isFirstisLast并不像大家想象當中的那樣,代表著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來理解,我覺得我已經解釋的比較清楚了。



  1. moveFirst moveLast方法

    當用戶調用了DatasetmoveFirstmoveLast之后,DatasetisFirstisLast立刻被置為true

    dataset沒有任何可見記錄的時候,isFirstisLast將同時為true,并且當前記錄為null

    想必在前面理解了我對isFirstisLast的講解之后,對這兩個方法的理解應該不會出現什么偏差了。

?????????不過我想提醒大家一下,注意我這里的用詞,是“可見記錄”,即是說,如果在客戶端刪除了所有的記錄,雖然沒有向服務器提交,
?????????但此時isFirstisLast都會同時返回true。這里就很好的統一了對用戶的“體驗一致性”,即用戶認為已經沒有數據了。



  1. 不知道大家有沒有在瀏覽器中查看過Dorado生成的jsp文件的源代碼,其實這些源代碼都是通過htmlxml界面模板信息共同展現的。



  1. Dorado內部加載順序:

        第一步: 客戶端發出請求

??????????????????????????????第二步:初始化 視圖模型

??????????????????????????????第三步:初始化 Dataset

??????????????????????????????第四步:初始化 組件

??????????????????????????????第五步:完成組件與Dataset之間的綁定

??????????????????????????????第六步: Dataset向外部請求數據,完成數據加載

??????????????????????????????第七步:向客戶端返回HTML/XML界面模板信息

??????????????????????????????第八步:完成,顯示頁面


  1. Dataset中最重要的方法: flushData()

?????????功能我想我不說大家也知道,就是通過不刷新頁面來實現數據更新與交換。


未完待續。。。