Dorado學習- 企業通訊錄初級教程理論部分筆記

Dorado學習資料:

Dorado官方教程
Dorado開發問答-官網
Dorado入門教程
Dorado7實戰-企業通訊錄(初級

本文爲Dorado7實戰-企業通訊錄(初級)筆記
  • 更新Dorado配置規則

在Dorado開發中,我們經常會升級dorado提供的jar包,或引入一些新的 dorado add on。一般情況下升級jar都只要將工程lib下的jar替換就可以。但是在某些特殊情況下:
某個控件新增了幾個新的屬性,但是IDE的編輯器中無法看到;
dorado-core提供了新的控件,但是IDE中無法看到;
新引入的dorado add on的jar包自帶了一些dorado控件,但是IDE中無法看到;
這種情況下我們就必要更新Dorado的規則文件,Dorado的IDE是根據規則文件動態提供控件的編輯界面的。
規則文件的更新辦法如下: 首先右鍵單擊工程的根節點,找到其中的更新Dorado配置規則菜單,單擊執行規則更新;


  • Container控件

Container是一個容器控件,作爲容器型的控件,我們可以在內部加入多個子控件。控件之間的佈局關係由Container本身的Layout特 性決定;

將Container控件的Layout屬性設置爲hbox或其他格式;
hbox爲橫向佈局即加入的子控件將依次橫向排列。
vbox爲縱向佈局即加入的子控件將依次縱向排列。


  • AjaxAaction控件

AjaxAaction控件的service屬性中設置的值,我們稱之爲服務定位表達式,在Dorado7中服務定位表達式是用來描述服務的查找方式, 即Dorado7通過服務定位表達式來查找到具體服務,以便於對服務進行調用


  • @Expose標記

用於Service層
@Expose標記是Dorado7專門提供的標註,用於定義可暴露服務,根據這個規則Dorado7會將這個方法自動註冊在 ExposedServiceManager中,其中服務名爲:systemInfoService,
服務表達式爲:systemInfoService#getSystemInfo。服務名就是SystemInfoService.java在BeanFactory中註冊的bean的id,annotation機制會 自動將Ajax的S自動轉換爲小寫字母。


P103
self表示ajaxactionGetSysInfo這個控件自身,returnValue爲AjaxAction控件的屬性字段,表示Ajax調用結束後Java層返回的結果。
由於 Ajax方法返回的是一個Map對象,在JS中會自動轉爲JSON對象,這樣就可以直接通過 info.product,info.veneor,info.version訪問map中的內容。
#labelProduct表示當前頁面的labelProduct控件。
view.set("#labelProduct.text",“產品:”+info.product);這句代碼則表示設置當前頁面控件Id爲labelProduct的text屬性爲後臺方法的 相應返回值。


  • 利用Chrome調試工具對js進行調試

通常在項目中我們對js腳本進行調試有以下2種方式:

  1. alert調試法

首先是最原始也是最簡單的使用alert,在頁面中需要輸出需要的變量的地方加上alert函數,將變量彈出顯示;
alert方式雖然簡單,但是調試繁瑣,假如需要監視的變量過多的話,會彈出大量的彈出框,用戶體驗相當不好。目前alert調試方式我們不推薦使用 。

  1. 瀏覽器調試工具法

在頁面加載完成後,使用【F12】快捷鍵打開Chrome調試工具,
切換到【Sources】頁,在130行用【鼠標左鍵】打上斷點,然後點擊頁面中的【獲取系統信息】按鈕後,頁面執行到斷點處暫停,如下圖所示:

我們可以看到res中包含3個變量,如果需要添加監視,點擊鼠標右鍵在彈出菜單中選擇【Add to Watch】,添加監視:

在右側的【Watch Expressions】監視區中可以監控res中的變量:

  1. (強烈推薦)Debugger關鍵字調試法

方便快捷,不需要在View輸出的頁面中尋找需要調試的js,這個也是我們強烈推薦大家的調試方式。 我們在需要調試的js中加入debugger關鍵字,代碼如下圖所示:

打開Chrome頁面加載頁面並使用【F12】快捷鍵打開調試工具後,點擊頁面中的【獲取系統信息】按鈕,我們發現斷點自動停止在debugger關 鍵字處:


第4章

  • BDF 創建數據庫模型

步驟: P111
step1 在對應的目錄(db), 新建 “數據庫模型” 文件;
step2 右鍵,import導入數據庫驅動jar;
step3 數據庫連接配置,選擇數據庫表;
step4 右鍵 “數據庫模型” 文件 export JavaBean到已經建好的包中

作用:根據數據庫錶快速生成javabean;

dbtool數據庫建模工具不僅可以用作hibernate實體映射類生成工具,也是一個優秀的數據庫建模工具,更多的用法請自 行嘗試;


  • HibernateDao

HibernateDao是一個泛型父類,所以必須在子類指定具體的類型
爲了開發簡便,工程中採用Dorado7提供的Hibernate Add
On擴展,可以通過繼承HibernateDao對象來實現自己的業務Dao對象,HibernateDao已經實現了增刪改查的基本方法,所以Dao類暫時不需要 編寫具體的內容。

configure.properties : 數據庫的配置信息;
app-context.xml : 數據源連接配置;
web.xml :


  • Model

參考P125: 配置,創建model,model的控件配置,通過簡單Java對象自動創建PropertyDefs;
Dorado7本身是採用基於數據模型驅動的開發模式
DataType就是對數據格式的定義,可類比數據庫模式定義語言DDL

如果將一個DataType定義在View的Model節點下,通常說這個DataType是當前View私有的,如果另一個View也想使用相同的DataType就需要 在那個View中再次定義這個DataType。
爲了能到達到DataType重用的目的,或者通俗的說全局的DataType,Dorado7專門提供了Model配置文件,通過定義一個專門的Model文件, 在其中添加若干個DataType給整個工程共享使用:

Dorado7工程通過系統配置,預先讀取Model文件,並初始化這些DataType信息。相關的配置文件有:dorado-home文件夾下的configure.pro eprties:

配置文件中定義了model.root。最終工程會根據配置尋找相關的Model配置文件,並初始化全局的DataType。如下圖:


  • DataSet

DataSet一個數據容器控件。
p131 瞭解DataSet功能作用?
DataSet,DataType,dataProvider之間關係?

DataSet是一個數據容器控件,在頁面上是不可見的,爲了展現其中的數據我們需要添加一個可以展現數據的控件對象,如AutoForm。

拓展:
DataSet一個數據容器控件。例如:datasetCompany中可以包含1個到多個Company對象,那麼Company對象的結構是怎麼樣的呢?這是由DataSet的DataType屬性定義的。現在我們來定義datasetCompany的 dataType屬性,我們選擇dataType屬性:

DataSet設定DataType屬性時,在這個嚮導窗口需要特別注意Select object
type的選擇,如果採用Default就表示當前數據容器DataSet只能包含一個DataType的數據實體,而如果選擇Collection就表示它可包 含這個DataType結構的一個Collection集合。
對於DataSet而言這是具有明確區別的,在後期訪問DataSet和存取 DataSet中數據的相關代碼會有所差別,因此在開發的時候開發人員要明確Select object type屬性應該取那個值。

在多數情況下,DataSet中的數據多是以集合形式存儲,選擇Collection。

info
我們定義的dataProvider跟前面第三章中AjaxAction的service同屬於服務定位表達式,dataProvider是Dorado7中常見的數據加載技術,主要用於爲DataSet加載數據,本身也是一種Ajax數據加載形式。
companyService#getCompany這個表達式的意思爲在Spring的beanFactory中尋找id爲companyService的bean,執行其中的get Company方法爲datasetCompany提供數據。
companyService# 更多信息可以參考相關鏈接 DataProvide與DataResolver 。

  • AutoForm

新建並配置AutoForm
datasetCompany是一個數據容器控件,在頁面上是不可見的,爲了展現其中的數據我們需要添加一個可以展現數據的控件對象,如AutoForm。 在視圖中添加AutoForm控件:

note
如果需要設置autoformCompany只讀還有另外一種方法,直接設置datasetCompany的readOnly屬性爲true即可。前面提到AutoForm控件爲數據敏感型控件,當其數據來源的DataSet設置爲只讀時,那麼AutoForm自然也變爲只讀。

這樣做的好處在於只要單獨設置DataSet的readOnly屬性就能控制所有與之綁定的數據敏感控件的只讀狀態。

  • DataProvider

@DataProvider和是Dorado專門提供的標記,與第三章中提到的@Expose相似,@DataProvider會自動將當前方法對應的服務,根據 一系列約定的規則,在運行時註冊成全局的DataProvider放在DataProviderManager的對象中,用以對DataSet提供數據加載服務。 關於詳細信息請參考 DataProvider和DataResolver


第5章

Dorado7工程通過系統配置,預先讀取Model文件,並初始化這些DataType信息。
相關的配置文件有:dorado-home文件夾下的configure.proeprties:

Model用於管理DataType

在SlEmployee這個dataType上點擊鼠標右鍵選擇【通過簡單Java對象自動創建PropertyDefs】


  • DataGrid

P144
DataGrid其實就是我們日常開發中使用的表格控件


  • 分頁

P147
DataPilot是數據導航條控件,主要用於數據分頁導航顯示等

對於需要支持分頁處理的DataProvider方法,要求必須包含一個Page參數,Page參數是Dorado7中支持分頁的一個工具類,採用分頁技術處理 後,每次請求一個新的分頁數據都會產生一個DataProvider的AJAX請求,在這個請求動作中,客戶端會自動上傳每頁需要加載的數據是多少條(pageSize)和現在需要加載的數據是第幾頁的(pageNo)。
這些信息都會由DataProvider處理機制自動將信息放在Page對象中,並激活DataProvider方法。這樣我們就可以在DataProvider方法中 通過page對象的getPageSize()和getPageNo()方法獲取客戶端分頁請求的基本分頁信息。並交給後臺做數據查詢的DAO做進一步的 處理。處理 後的數據存放在Page對象中,並傳遞到前臺進行展示。


  • 過濾欄查詢

P150
note
我們在過濾欄中輸入值,敲回車就會執行過濾查詢,默認情況下這個查詢只針對當前已經加載到瀏覽器端的數據進行過濾處理即進行基於 當頁數據的前臺查詢,如果我們希望執行持久層層面的過濾查詢,則需要將這些參數提交給持久層負責查詢的相關DAO對象,數據傳遞技巧-首先要設置Grid的filterMode爲serverSide(默認 clientSide):

  • Criteria對象

P151
(com.bstek.dorado.data.provider.Criteria),這是Provider提供的一個封裝對象,用於描述Grid中過濾欄中的查詢條件。通過傳入查詢條件組裝查詢語句,最終獲得查詢結果。我們可以通過在代碼中打斷點驗證這一點


第6章
P155
DataType不僅可以在*.model.xml中添加設置,也可以在*.view.xml中添加設置;
DataType可以新建PropertyDef;
可以對PropertyDef添加Validator;

在4.2.8節中提到如果將一個DataType定義在View的Model節點下,那麼這個DataType是這個View私有的,DataType支持繼承:包括多重繼承 ,在本節我們在View中定義的DataType繼承models目錄中Common.model.xml中定義的SlCompany。

在View私有的【SlCompany】這個DataType下新建2個PropertyDef,並對PropertyDef添加Validator;

note
不建議在公用的DataType的PropertyDef上設置數據校驗器或過於私有化的配置,因爲DataType的繼承特性,可能導致不必要的問題 。

AutoForm空間綁定屬性:點擊AutoForm控件,例如autoformCompany控件,在彈出菜單中選擇【Generate AutoForm Elements】

  • 新增並配置UpdateAction控件

P 161
info
如果想做持久化處理,還需要藉助DataResolver技術。
DataResolver與DataProvider類似,也是一個Ajax請求,只是作用與DataProvider相反,DataProvider用於從服務器端獲取數據存放在客戶端的DataSet中,而
DataResolver技術卻是爲了將客戶端的DataSet中的數據提取出來,並通過AJAX技術上傳到服務器端,便於交給後臺的DAO做持久化 的處 理工作。
在Dorado7中DataResolver一般都是通過UpdateAction控件來配置的,

爲UpdateAction添加子節點UpdateItem,綁定需要提交的DataSet數據集:

info
hbox橫向佈局中的pack屬性表示子控件的對齊方向,有3個屬性可選:start,center,end,分別表示按照開始的位置對齊,居中對齊 和按照最後的位置對齊。


第7章
P173

  • 校驗器的使用

info
AutoForm控件的createPrivateDataSet屬性主要是設置是否要在AutoForm沒有實際綁定DataSet時自動創建一個私有的DataSet用 於管理表單數據。
由於Dorado中有很多類似於數據校驗、鍵值映射這樣的功能都依賴於DataSet,所以如果僅僅使用簡單的Entity綁定,AutoForm必然 是失去一些功能特性。 啓用本屬性可以讓AutoForm自動創建一個私有的DataSet,以便於使用上述各項功能。
對於createPrivateDataSet爲true的AutoForm,如果我們通過如下代碼獲取Entity對象,則它是被這個私有的DataSet所管理的實體 對象。
var entity = autoForm.get(“entity”);

info
ToolBar是工具欄控件,同時也是一個容器控件,一般情況下ToolBar都是用以統一管理界面上的功能按鈕或菜單項

info 我們發現在設置按鈕的圖標時,我們使用了表達式,url(>skin>common/icons.gif)我們稱之爲資源定位表達式。
作爲WEB程序員我們都知道:在我們定義一個URL的時候,如果我們定義一個字符串,其開頭以"/“開始(包括Dorado開發當中也會接觸到 的,如button的icon也是一個url字符串),則表示從端口號開始計算,而不是以webapp的名字開頭,而在很多場景下我們還需要webapp的 名字,爲了解決這個問題,很多系統都將這個webapp的名字作爲JS變量輸出到客戶端,然後在客戶端拼寫最終的URL。
這個做過這方 面開發的人都大概瞭解這個處理過程。在Dorado7中如果我們的URl以應用開頭,則我們只要以”>“開頭就可以,對於這種URL,Dorado會自動的幫助你轉換爲 webapp開頭的URL,如:
“>images/icon.gif"將轉換爲”/appContextPath/images/icon.gif”
另外Dorado中還支持帶有skin>前綴的寫法,如:"skin>widget.css"將轉換爲Dorado當前當前皮膚路徑下的widget.css的URL。
因爲skin是預設的URL前綴代表當前皮膚的跟路徑。
那麼url(>skin>common/icons.gif)表達式的意思即獲取Dorado當前皮膚路徑下的common目錄中的icons.gif。
表達式後面所跟的參數則是偏移量,在開發中將一些常用圖標合併到一張圖片中,然後採用圖片偏移量的方式來定義圖標。名爲icons.gi f的圖片就是這些圖標的集合。
當我們頁面上的某一個控件對象希望顯示其中的某一個按鈕的時候,我們就可以根據圖標偏移量動態調整最後兩個數字,參考如下的icon tool工具,在這個工具中我們單擊圖標上圖同的位置,可以看到它可以幫助我們自動計算圖標的偏移量,以及剪切之後顯示的圖標內容:
TODO 瞭解使用Dorado的Icon圖標工作 P177


  • DataPilot

TODO
import org.hibernate.annotations.common.util.StringHelper作用功能

P186
note 通過前面幾個章節的開發,我們知道如果需要點擊按鈕觸發Action,有2種方式

  1. 設置Button控件的action屬性,將Button和Action綁定起來。
  2. 在Button控件的onClick事件中直接動過js調用Action的execute方法
    注意:這2種方式只能使用其中一種,假如你配置了Button的action屬性,又在onClick事件裏面寫了代碼,那麼action屬性將失效。

第8章
P191

  • Dialog控件

Dialog控件是一個容器控件,可以在其內部加入子控件,同時默認是個不可見控件,如果需要顯示請設置visible屬性爲true

info
我們可以發現Dialog控件下有3個節點,分別是Buttons,Children和Tools,
Buttons節點下用於放置Button控件,它們會佈局到Dialog控件的下方居中;
Children節點用於放置在Dialog中的子控件,子控件的佈局將依據Dialog的佈局;
Tools節點用於放置Dialog右上角的工具按鈕 另外從三個節點的圖標也能看出它們具體作用。

  • 給字體加樣式:作用控件Label

調整Label的css樣式,找到控件的【style】屬性,點擊下方的【Add】按鈕,給控件增加樣式屬性,並輸入屬性值;

  • AutoForm、AutoFormElement控件的使用

AutoForm控件內部元素佈局默認爲form佈局,設置colSpan是使email字段跨列顯示,同理rowSpan是跨行顯示

dorado.MessageBox.alert(result.errormsg,{title:“提示”,icon:“WARNING”});
note
我們可以發現在dorado.MessageBox.alert這個方法中增加了json格式的參數,這個參數用於修改提示框的標題和顯示的圖標,具體描 述請參考Dorado7 js doc中
dorado.MessageBox這個靜態工具類中對於alert方法和show方法的描述。

P197
/否則彈出返回值中的異常消息提示 dorado.MessageBox.alert(result.errormsg,{title:“提示”,icon:“WARNING”});
note
我們可以發現在dorado.MessageBox.alert這個方法中增加了json格式的參數,這個參數用於修改提示框的標題和顯示的圖標,具體描 述請參考Dorado7 js doc中dorado.MessageBox這個靜態工具類中對於alert方法和show方法的描述。

info
onReady事件:當組件被激活(即真正可用時)時觸發的事件。
onKeyDown事件:當控件擁有焦點並且有按鍵被按下時觸發的事件。

P202

  • DoradoContext是Dorado的上下文對象

P202
這就需要了解Dorado7的智能方法適配,所謂智能方法適配是基於"約定優於配置"的設計思路而提供。這樣在很多情況下我們不需要方法具有Dorado特性,也不需要引入Dorado的開發規範。
由Dorado7自動判斷這個方法中的各個參數以及返回值的用途。這是一種智能化的處理邏輯。這帶給 我們的好處:
幾乎不需要引入任何Dorado7的API。
按照業務的需要而不是Dorado7的需要來爲表現層編寫代碼。
可以令Dorado7與後臺業務邏輯之間的粘合層代碼更加簡潔、易讀。
在前臺我們將entity作爲參數傳遞給後臺,後臺就拿到一個Map參數,讓後對loginService這個bean進行方法匹配,假如有方法適配了,那麼就執 行其方法。如果沒有發現適配的方法,這個時候職能方法適配會將parameters中的參數拆開爲username,password,這樣就可以發現存在對應 的doLogin方法,並進行調用。並將結果作爲loginService調用的結果返回到前臺。


第9章
P208

  • 新控件的使用

菜單、提示信息、Frame

P209
通過EL表達式可以獲取session中對象的屬性,例如${session.getAttribute(‘user’).employeeName}即從session中的user對象中獲 取了中文名。關於EL表達式的詳細描述


第10章
Dialog控件
P218
通過控件標籤爲登出菜單和快捷按鈕添加事件監聽器
在前面章節中提到,Dialog默認是不可見控件,在點擊登出菜單或快捷按鈕時,才彈出登出確認對話框,因此我們爲其設置tags屬性,通過控件標 籤爲控件批量添加onClick事件監聽器,在點擊登出菜單或者快捷按鈕時,將DdialogLogout控件顯示出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章