?

Dorado on the way

200711



關(guān)于Dataset


  1. 可以通過RecordIterator dataset中的數(shù)據(jù)進(jìn)行遍歷(包括已經(jīng)在客戶端“刪除”的記錄)。

    為什么在客戶端已經(jīng)“刪除”的記錄,dataset仍然可以遍歷到?

    原因就在于Dorado出于對性能的考慮,在客戶端做的刪除并沒有立刻更新服務(wù)器段的記錄,而僅僅是在客戶端的dataset中做了刪除的標(biāo)記。在用戶提交了以后,才會對服務(wù)器端的記錄做修改。所以用戶在客戶端做的刪除操作后,如果刷新頁面,刪除的記錄將會重新出現(xiàn)。

    可以通過如下代碼對dataset中已經(jīng)標(biāo)記為“刪除”的記錄進(jìn)行遍歷:

?1RecordIterator?rit?=?dataset.recordIterator()?;?//?獲取dataset的遍歷器
?2
?3????????????rit.setVisibility(Dataset.FILTER_DELETED)?;?//?設(shè)置遍歷器的可見屬性
?4
?5????????????while(rit.hasNext()){
?6
?7?????????????????????Record?record?=?rit.nextRecord()?;?//?取得當(dāng)前的Record對象
?8
?9?????????????????????//?對記錄進(jìn)行操作
10
11????????????}

12

?

  1. isFirst 以及 isLast的理解

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

    isFirstisLast并不像大家想象當(dāng)中的那樣,代表著Dataset的當(dāng)前記錄(注意,所有對Dataset的操作,都是對“當(dāng)前記錄”而言)是否是第一條記錄或者是最后一條記錄。他們真正的含義如下:

??????????isFirst

??????????官方解釋:
??????????????????isFirst表示Dataset已經(jīng)在試圖繼續(xù)向前移動當(dāng)前記錄的過程失敗,亦即當(dāng)dataset的當(dāng)前記錄從第二條記錄轉(zhuǎn)到第一條記錄時isFirst仍然是false,只有當(dāng)Dataset試圖繼續(xù)向前移動當(dāng)前記錄后,isFirst才會變成 true,此時dataset的當(dāng)前記錄仍然是第一條記錄。

?????????我的理解:
??????????????????對于isFirst,你可以于Java當(dāng)中的Iterator作對比。我們假設(shè)Java中的 Iterator具有previous(),就是next()倒著遍歷(),那么當(dāng)當(dāng)前記錄從第二條作previous()成功到達(dá)第一條記錄的時候,isFirst仍然返回false,為什么?因?yàn)樵谝苿舆^程中沒有受阻,它成功的前移了。下面要注意了,現(xiàn)在當(dāng)前記錄已經(jīng)在第一條了,現(xiàn)在如果當(dāng)前記錄再試圖向前移動時,此時受阻了,因?yàn)樵诋?dāng)前記錄前面已經(jīng)沒有記錄可以移動了,此時 isFirst()返回true

如下圖:


dorado的設(shè)計過程中,數(shù)據(jù)導(dǎo)航條的數(shù)據(jù)前移和后移過程中,并不會查看當(dāng)前記錄是否是第一條或者是最后一條數(shù)據(jù),而是默認(rèn)前或者后還有數(shù)據(jù),從而繼續(xù)作向前或向后的操作,只有在移動受阻后,才修改是否到邊界的標(biāo)記,這樣或許在移動操作中可能會對移動的性能有一定的幫助。

個人認(rèn)為,這里把isFisrt()看作是對當(dāng)前記錄的操作時候“越界”的標(biāo)志更為合適。

IsLast

官方的解釋:

isLast表示Dataset已經(jīng)在試圖繼續(xù)向后移動當(dāng)前記錄的工程失敗,亦即當(dāng)dataset試圖繼續(xù)向前移動當(dāng)前記錄后,isFirst才會變?yōu)?font face="Times New Roman, serif">true,此時 Dataset的當(dāng)前記錄仍然是倒數(shù)第一條記錄。

我的理解:

可以對比isFirst來理解,我覺得我已經(jīng)解釋的比較清楚了。



  1. moveFirst moveLast方法

    當(dāng)用戶調(diào)用了DatasetmoveFirstmoveLast之后,DatasetisFirstisLast立刻被置為true

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

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

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



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



  1. Dorado內(nèi)部加載順序:

        第一步: 客戶端發(fā)出請求

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

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

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

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

??????????????????????????????第六步: Dataset向外部請求數(shù)據(jù),完成數(shù)據(jù)加載

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

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


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

?????????功能我想我不說大家也知道,就是通過不刷新頁面來實(shí)現(xiàn)數(shù)據(jù)更新與交換。


未完待續(xù)。。。