You are on page 1of 59

Oracle JDeveloper 系列文章

第九章:ADF BC 和 Application 的關係


在上一章,我們已經談過 ADF View Object 和 Application Module,那到底怎麼
用,我們怎麼利用 Oracle ADF 來開發前端的介面,這些前端可以是 Web 介面或
是 JClient 畫面,所以本章我們先來談前端的設計,如何將已經弄好的 Model 顯
示出來,先看一下畫面,會比較有信心,我們接下來會實做範例。

我們先來建立一個 Master-Detail 的畫面,體會一下,ADF Framework 怎麼來開


發,看一下整個流程。

回想一下上一章最後的結果,我們建了一個 HrAppModule,裡面有一個
Master-Detail 的結構,分別是 ManagersView1 是代表 Master,而 EmployeesView2
則是裡面扮演 Detail 的角色,接下來繼續看喔。

1 頁
11/1/2005
Oracle JDeveloper 系列文章

我們先從 Oracle Business Components Browser 來看一下 Master-Detail,選一下


Test。

我們可以看到 Master:ManagersView1。

2 頁
11/1/2005
Oracle JDeveloper 系列文章

同時間,來看一下單純的 Employees 檔,接下來看一下 EmpManagerFkLink1。

該 View Link 則是一個 Master-Detail 的關係,當我 Master 的 Data 已經更改,則


Detail 的資料也會同步變更,接下來我們看如何寫 JSP Page。

3 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以看一下有兩個 Project,分別是 Model 和 ViewController,如果只有 Model


Project,則需要自己新增一個 Web Project。

建好後,選一下 ViewController 按一下右鍵,選 Open Struts Page Flow Diagram。

4 頁
11/1/2005
Oracle JDeveloper 系列文章

這樣 Oracle JDeveloper 則會開啟 Struts-config 的 Diagram,提供您一個開發 Struts


的圖形式介面,提供您流程設計。

看一下全畫面,右上角會顯示 Component Palette,則可以看到有 Struts Pages Flow


的分類,可以提供您拉 Data Page 等等,供您拖拉到 struts-config.xml 中。
還有旁邊的 Data Controls,可以提供您 ADF Framework 的 Object,會於後面來
詳述。

5 頁
11/1/2005
Oracle JDeveloper 系列文章

以下的相關 Component 可以提供你拉到 Struts-config.xml,可以讓您在


struts-config.xml 的 Diagram。

1. Page:可以代表一個 JSP Page,一般來說是給傳統 Struts 使用,不會用於 ADF


Framework,除非有拉出 Forward,否則不會新增設定到 Struts-config.xml。
2. Data Page:可以代表一個 JSP Page 或是 UIX Page,但是可以拉入 ADF
Object,作為 ADF Data Model 的前端使用者介面(User Interface) ,可以將
Data Controls 的 ADF Object 拉入。
3. Action:代表是一個傳統 Action,可以提供 Struts 的 Action,它是延伸
org.apache.struts.action.Action,可以提供傳統 Struts 的邏輯設計,決定某一些
Action,並且導向哪一個 Forward。
4. Data Action:相同的,Data Action 則是代表某種 Action,但是該 Action 卻可
以使用 ADF Object,一般來說,Data Action 是拿來 Query Data,但是在一些
複雜的 ADF Application,需要將 Data Action 分開,某些拿來建立資料,刪除
資料或是查詢資料,而它是延伸 org.adf.controller.struts.DataAction。
5. Forward:這是標準 Struts 的 forward,可以連結任兩個 Data Page 或是 Data
Action,可以經過某一種邏輯,利用 Forward 導向不同的 Data Page。
6. Page Link:代表一個 Struts HTML Link,可以導到不同的 Page。
7. Page Forward:是一個 Page 的連結,至於 Page Forward 和 Forward 會很容易
搞混,Forward 一般來說是某個 Avtion 可以有多個 Forward,而 Page Forward
則是某個 Action 只有一個 Forward,只是純粹導向。
8. Note:就是說明的圖示。
9. Attachment:則是兩個 Note 的連結等等。

PS:本部分解釋或許不是很清楚,如果有錯,請指正,不然也可以參考 Oracle
JDeveloper 10g Handbook。

6 頁
11/1/2005
Oracle JDeveloper 系列文章

首先我們先新增一個 Note,來說明該 Struts-config.xml 的說明,選一下,拉到


struts-config.xml 這個 Diagram。

如下圖,我們已經拉了一個 Note,並且進行相關文字輸入。

如下圖所示,可以調整一下該 Note 的長度,應該會比較好看。

一樣的,拉 Data Page 到 Struts Diagram,準備建立 JSP Page 來 Query Data。

7 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,會拉出一個圖,可以看到預設會帶 /dataPage1,我們可以改一下名稱。

我們改一下 Data Page 的名稱,更改名稱為 /browse。

有沒有注意圖上有一個驚嘆號,代表實體的 JSP Page 尚未建立,可以直接點兩


下該圖,可以跳出 Create Page Diagram,預設會帶 Data Page Name。

可以在導覽區看到 browse.jsp 已經被建立,並且預設是編輯 browse.jsp 這個檔


案,準備來建立相關的 ADF Object。

8 頁
11/1/2005
Oracle JDeveloper 系列文章

在繼續看範例之前,先來說一些基本觀念。

JSP Page JSP Page

Binding Context

Binding Container Binding Container

Data Control Data Control

ADF BC Other Business Services

本圖來自於 Oracle JDeveloper 10g Handbook

z Data Control:
在 ADF Application 中,一般來說,前端的 View,應該不會直接去 Access ADF
BC 或是其餘的 Business Services,所以 Data Control 應該可以算是 Business
Services 的一個前端介面,如果沒有 Data Control 的話,需要使用不同的 API
去 Access ADF BC 等等,但是 ADF Framework 提供一個 Data Control,一組
固定式的 API 方式,前端對 Data Control 負責,其餘和後端 ADF BC 的處理,
就交給 Data Control 來處理。
z Binding Containers:
本身可以將其想成是一個 Page 的區塊,每一個 Binding Containers 可以代
表一些功能,例如:其中一部份可以是去瀏覽 Dept Table(部別檔) ,而 Page
另一塊可以有另一個 Binding Container,可以瀏覽 Employee Table(員工檔)
且員工檔可以進行編輯,達成 Master-Detail 的 Page,所以本身 Binding

9 頁
11/1/2005
Oracle JDeveloper 系列文章

Container 是一個 Java Object,可以提供 ADF Framework 在一個 Page 或


是 Form 中的 Binding。
¾ Iterator Bindings:
此種 Binding 是代表一組 Collection Data,可以從頭到尾瀏覽相關資
料,一般而言,通常代表一個 ADF View Object,而這個 Binding 則是
其餘型態 Binding 的基礎。
¾ Range Bindings:
也就是上述的 Iterator Bindings 的一個延伸,也就是該 Collection 的一個
區段的資料,也就是侷限的 Collection,也就是 Range Bindings。
¾ Attribute Bindings:
在一筆資料中,代表我們的 Attribute Name,也就是 Metadata,所以通
常代表是 Label(標籤)。
¾ List Bindings:
代表是給予一個 LOV(List Of Value)元件,其中 LOV 的資料可以來
自於固定值或是一個 Collection。
¾ Action Bindings:
送一個 Command 至 Business Services,例如更改目前存取資料列或是
Commit 和 Rollback Transaction。
看完了以上的說明,大致針對 ADF 的概念進行說明,以下我們會來示範相關的
範例,都會間接和直接用到上述的 Binding,所以接著看下去吧。
我們先來選一下 ManagersView1 這個 View Object,並且於屬性上選 Read-Only
Form,先建立 ManagersView 的 Form,直接拖拉到 JSP 空白頁面上。

10 頁
11/1/2005
Oracle JDeveloper 系列文章

可以看到 JSP Page 已經建立一個 ManagersView 的 Read-Only Form。

接下來,我們可以看到 Oracle JDeveloper 的 Structure 區,可以看到 ADF 已經建


立一個 html form,可以在 Structure 區看到 JSP Page 結構。

以下是可以看到 JSP Page 的 UIModel,以下您可以看到幾個重點,首先可以看到


1. ManagersView1Iterator:
也就是 IteratorBinding,會將整個 View Object 建立一組 Collection Data,可以
讓 ADF Framework 整個從頭到尾瀏覽一遍。
2. ManagersView1:
代表是 Range Binding,也就是可以說是代表一個侷限的範圍,因為從 View
Object 的角度來說,你會限制某一些資料。
3. EmployeeId、LastName、Salary、JobId 和 NumReports 等等:
這些都是屬於 Attribute Binding,也就是欄位的 Label,也可以說是 Metadata,
所以等會我們來看一下 JSP 的程式。

11 頁
11/1/2005
Oracle JDeveloper 系列文章

Iterator Binding

Range Binding

Attribute Binding

ManagersView1Iterator:

12 頁
11/1/2005
Oracle JDeveloper 系列文章

ManagersView1:

Attribute Binding:

13 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以直接點一下 EmployeeId 這個 Attribute Binding,會幫我們開啟 Attribute


Binding Editor,您可以再來決定是不是需要額外有新增的欄位等等。

我們回到 JSP Page 中,可以看到剛剛建立的 Read-Only Form,也就是一個唯讀


的 Data Form,左邊是標籤,而右邊是實際欄位。

14 頁
11/1/2005
Oracle JDeveloper 系列文章

我們剛剛建立一個 Read-Only Form,接下來,我們需要操作這個 Read-Only


Form,所以我們必須要加入動作,所以我們選到 ManagersView1 同層的 Operations
中的 First,屬性選擇 Button,並且將其拖曳到 Form 的上方。

如下圖,會產生一個 First 按鈕的動作,可以操作該 Read-Only Form。

15 頁
11/1/2005
Oracle JDeveloper 系列文章

接下來,我們一樣的將 Previous 拉到剛剛的 First 後面。

如下圖所示,我們依序將 First、Previous、Next 和 Last 依序拉好。

接下來,我們來看到 JSP Page 的 browseUIModel,看到多了 4 個動作。

16 頁
11/1/2005
Oracle JDeveloper 系列文章

我們來看一下 First,First、Previous、Next 和 Last 等等,本身就是 Action Binding,


所以我們直接在 First 上點兩下,可以開啟 Action Binding Editor。

可以看到我們正選到 ManagersView1 的動作,並且選到 First,不需要做任何動


作,直接按取消。

17 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以看其中一個動作 Next,ADF 會使用 EL 語法,其中寫法如下。

我們先來看結果,直接在 ViewController 右鍵按一下 Rebuild,將程式編譯一下。

18 頁
11/1/2005
Oracle JDeveloper 系列文章

我們回到 Struts-config.xml 的圖,在 Data Page:/browse 的圖上按右鍵,並選一


下 Run,即可以執行該 Data Page,注意,不要直接 Run browse.jsp,因為 Struts
必須要透過 Action 去執行。

可以看到 Oracle JDeveloper 已經開始啟動 Embedded OC4J,並且完成初始,準備


執行該 Data Page。

如下圖,已經成功執行該 Data Page,已經將 ManagersView 給顯示出來,可以看


到所有主管的資料。

19 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以點 Next,即可以顯示下一筆紀錄,點 Previous,即可以顯示前一筆紀錄。

當然,First 可以直接跳到第一筆,而 Last 則可以跳到最後一筆。

第一個範例已經示範完,關於 ADF Framework 應該有一個基本認識,我們要一


個 Table 的 Read-Only Report,是不是蠻簡單呢,其實 ADF Framework 就是這樣
的概念,你應該更加將時間和精神集中於 Model 和 Business Rule,其於 ADF 會
幫你做,所以接下來,我們繼續看上一個例子的進階。

我們切回 browse.jsp,我們來新增一些功能。

20 頁
11/1/2005
Oracle JDeveloper 系列文章

剛剛我們建立了 ManagerView1 的 Read-Only Form,接下來,我們選


EmployeeView2 這個 View Object,而 EmployeeView2 則是代表 View Link 的另一
個 View Object,是整個 Master-Detail 中的 Detail 部分。
選到 EmployeesView2,並且確定 Drag and Drop As:是選到 Read-Only Table。

我們將剛剛選擇的,拉到 ManagerView1 下面,如下圖所示:

21 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以看到 UIModel 中看到加入 EmployeesView2 這個 View Object。

我們將 EmployeesView2 點兩下,可以看到 Table Binding Editor,該


EmployeesView1 是在 ManagerView1 的子項目,意味兩者建立一個 View Link,
可以做出 Master-Detail 關係,你可以決定顯示多少欄位,這裡我們不做變更。

22 頁
11/1/2005
Oracle JDeveloper 系列文章

我們同時也加入一個 EmployeesView2Iterator,每一個 View Object 都會產生對應


的 Iterator Binding。

我們可以將該 EmployeesView2Iterator,設定 Range Size,即可以設定一次顯示幾


筆,目前設為 10,我們可以更改成 8,則一頁會顯示 8 筆。

如下圖,我們將 Range Size 更改成 8。

23 頁
11/1/2005
Oracle JDeveloper 系列文章

我們為 Detail Table 加入該有動作,我們進行跳頁動作,所以加入 Previous Set,


注意:需要用 EmployeesView2 下面的 Options,因為是要操控 EmployeesView2。

一樣的,我們一樣的拉取 Next Set 到 Detail Table 的上方。

24 頁
11/1/2005
Oracle JDeveloper 系列文章

接下來,我們將現有 Table 加上一個欄位,所以在 Table 處按右鍵,選 Table ->Insert


Rows Or Column,可以新增欄位。

所以我們選 Column,並且選數目是 1。

25 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,我們新增一個欄位。

ADF 中,有一項動作,可以代表是某一筆資料的 Key,也就是


setCurrentRowWithKey,所以我們選擇 setCurrentRowWithKey(String),且該屬性
選 Find Row Link,並且將其拉到我們剛剛新增的欄位中。

26 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,我們已經拉取進來,預設會取名是 Select,可以自行更改。

看一下程式碼,剛剛拉取的部分,新增一行 EL 的程式碼。

接著,我們將動作 Create 拉進來,預備需要建立一筆新的資料。

如下圖所示,Create 按鈕已經新增好了。

27 頁
11/1/2005
Oracle JDeveloper 系列文章

一樣的,我們將資料刪除動作 Delete,一樣的加入。

如下圖,我們已經將 Delete 按鈕加入。

將剛剛修改的 browse.jsp 重新編譯一下,看看是否有錯,一般而言,利用 ADF


所拉取的,都應該要是正常可以編譯。

28 頁
11/1/2005
Oracle JDeveloper 系列文章

我們回到 Struts-config.xml,在 browse 的 Action 上按一下右鍵,選擇 Run。

可以看到整個 Master-Detail 的畫面已經建立好,可以開始使用看看。

29 頁
11/1/2005
Oracle JDeveloper 系列文章

當你點到 EmployeeId 是 121 時,按一下 Select,會看到游標星星移到 121,意味


我們目前正選到 121,等會我們就可以透過這個方式連到編輯畫面。

所以你可以試著動一下 Master Table 資料,應該可以看到 Detail Table 也會一起變


動,也可以動一下 Detail Table 資料,所以建立一個 Master-Detail 的 HTML Form,
在 ADF 和 Oracle JDeveloper 幫助之下,變成非常非常簡單。

接下來,我們再來新增一些功能,我們先回到 browse.jsp,請切到 Design 區。

30 頁
11/1/2005
Oracle JDeveloper 系列文章

回到 Data Control Palette,我們來新增一個欄位 List,讓我們可以快速挑選到主


管的方式,所以我們選 ManagersView1,並且選擇屬性為:Navigation List。

我們將 ManagersView1 拖拉到 browse.jsp 中,放於 Last 後面。

31 頁
11/1/2005
Oracle JDeveloper 系列文章

我們回到 Components 的區塊,選到 HTML 模組,我們將 Submit Button 拉到剛


剛所新增的 List 旁邊。

如下圖,我們將 Submit Button 拉到該位置放好。

32 頁
11/1/2005
Oracle JDeveloper 系列文章

看到 Structure 區,已經新增一個元件 ManagersView1 的 List 元件,其中當然也


包含一個 Iterator。

我們直接點兩下,可以開啟 List Binding Editor,看到相關資訊。

33 頁
11/1/2005
Oracle JDeveloper 系列文章

在上圖,我們不需要那麼多欄位,所以將 Display Attributes 只選到 EmployeeId


和 LastName 這兩個欄位即可,其餘都選回 Available Attributes。

所以這個 List Binding 是使用 ManagersViewIterator,所以我們先選到他。

34 頁
11/1/2005
Oracle JDeveloper 系列文章

我們看一下 ManagersViewIterator,原來是設定 Range Size:10,可以設定一頁顯


示幾筆,預設是 10。

我們將 Range Size 更改成 -1,意味所有資料都出來。

我們先儲存一下。

因為我們可以將 Transaction 加入,當我資料有進行異動,可以加入是否需要


Commit,所以我們在最外層的 Options,將 Commit 拉到 browse.jsp 中。

35 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,我們將 Commit 拉到 First 前面。

一樣的,我們將 Rollback 拉到 browse.jsp 中,可以將 Transaction 進行回復。

36 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,我們將 Rollback 按鈕新增到 browse.jsp。

為了版面美觀,我們新增一行,以區分按鈕屬性。

37 頁
11/1/2005
Oracle JDeveloper 系列文章

可以看到多了兩個 Action Binding,包含 Commit 和 Rollback。

我們先來測試一下,所以先到 Struts-config.xml,在/browse 按一下右鍵,選 Run。

38 頁
11/1/2005
Oracle JDeveloper 系列文章

可以看到 Page 已經產生,注意已經有多一個 List。

我們可以看到該 List 有員工編號和姓名,我們可以選到 123 的主管。

按一下 Submit,我們可以看到如何驅動資料。

39 頁
11/1/2005
Oracle JDeveloper 系列文章

我們看到 Master 和 Detail 部分,都是跳到主管是 123 的資料,也就是我們可以


快速跳到主管是 123 的資料。

我們按一下 Create,雖然 Create 按鈕目前沒有作用,但是可以觸動 Transacion。

我們看到 Commit 和 Rollback 的按鈕都變成可以按了,可以針對動作進行 Commit


或是 Rollback。

40 頁
11/1/2005
Oracle JDeveloper 系列文章

我們回到 Struts-config.xml 中,我們將編輯畫面建立起來。

我們再來拉一個 Data Page 進來 Struts-config.xml 中。

預設上,會取名為/dataPage1。

我們將 Data Page 名稱更改成/edit。

接下來,我們拉 Forward 連結/browse 和/edit 之間。

41 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,由/browse 拉到/edit,可以看到一條 Forward 就拉出來了。

我們將 Forward Name 由 success 更改成 Create。

接下來,我們繼續加入一個 Forward。

如下圖所示,預設上 Forward Name 是 success,可以將 Forward Line 曲折,會比


較美觀。

我們將 Forward Name 由 success 更改成 setCurrentRowWithKey,注意任何 Forward


Name 都會程式習習相關,所以注意大小寫。

我們先來建立 edit.jsp,直接點兩下來建立 edit.jsp。

42 頁
11/1/2005
Oracle JDeveloper 系列文章

因為我們需要建立 Detail 部分的編輯畫面,所以我們先選到 EmployeesView2,


並且屬性選到 Input Form,並且拖拉到 Edit.jsp。

如下圖,預設會建立編輯畫面。

43 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以看到 Structure 區,會自動幫我們建立相關元件,包括 Iterator 等等。

因為我們最後兩列不需要,所以我們點到第五列,並且按右鍵並選 Select Row,


可以選擇該列。

44 頁
11/1/2005
Oracle JDeveloper 系列文章

當我們已經選到整列,我們可以按右鍵,選 Table->Delete Row,可以刪除該列。

一樣的動作,我們將最後一列刪掉。

45 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖所示,最後兩列已經刪除。

我們切到 Structure 區,看到 ManagerEmpId 和 ManagerName 這兩個 Attribute


Binding,所以我們必須也要進行刪除。

46 頁
11/1/2005
Oracle JDeveloper 系列文章

我們按下右鍵,選 Delete,可以讓我們 Delete 該 Attribute Binding。

我們選 Yes,可以來刪除 ManagerEmpId 這個 Attribute Binding。

同樣的,我們將 ManagerName 這個 Attribute Binding 刪除。

47 頁
11/1/2005
Oracle JDeveloper 系列文章

一樣的,我們選一下 Yes,可以將該 Attribute Binding 刪除。

因為我們需要新增一個 Lov,所以我們需要新增一個 Iterator Binding,如下圖,


我們可以先選 Create Binding -> Data -> Iterator。

48 頁
11/1/2005
Oracle JDeveloper 系列文章

如下圖,我們會打開 Iterator Binding Editor,準備建立喔。

我們名稱輸入 ManagerIterator,然後 Data Collection 選 ManagersView1,可以建


立所有主管資料的 Data Iterator。

49 頁
11/1/2005
Oracle JDeveloper 系列文章

如 Structure 區所示,我們已經建立一個新的 Iterator。

預設 Range Size 為 10。

我們先將其變更成 -1,意味所有資料都秀出來。

50 頁
11/1/2005
Oracle JDeveloper 系列文章

我們先切回 edit.jsp,我們想要建立一個 List Of Value,所以我們將第四個欄位先


選起來,然後刪除它。

如下圖,該文字欄位已經刪除了。

51 頁
11/1/2005
Oracle JDeveloper 系列文章

我們回到 EmployeesView2 這個 Detail View Object,我們找到其中的 ManagerId


的欄位,然後屬性選擇 List Of Values,並且拖拉到剛剛刪掉欄位的地方。

如下圖所示,我們已經將 LOV Component 拉到 edit.jsp 中。

52 頁
11/1/2005
Oracle JDeveloper 系列文章

我們可以看到 edit.jsp 中的 Structure 區,有多一個 List Binding:ManagerId1。

我們可以直接將剛剛 ManagerId1 點兩下,可以開啟 List Binding Editor,可以來


設定 LOV 的相關設定。

53 頁
11/1/2005
Oracle JDeveloper 系列文章

我們預設需要秀出所有主管資料,所以 LOV Source Iterator 選 ManagerIterator。

而 Target Data Collection 則是選 Detail 中的主管員工編號欄位,亦即,當我畫面


選到另一個主管,會去 Update Detail 所對應的主管員工編號欄位。

54 頁
11/1/2005
Oracle JDeveloper 系列文章

我們來設定 LOV Display Attributes,設定需要顯示多少資料在 LOV 欄位。

我們只要欄位顯示員工編號和姓名,所以只需要 EmployeeId 和 LastName。

55 頁
11/1/2005
Oracle JDeveloper 系列文章

我們先將之前修改的儲存一下。

我們回到原來的 Struts-config.xml 部分,要設定 Edit 回到 browse 的 Forward。

一樣的,我們選 Forward,準備拉到流程圖中。

一樣的,我們如下圖看到已經拉好了。

56 頁
11/1/2005
Oracle JDeveloper 系列文章

我們將 Forward Name 從 success 更改成 Submit,因為 edit.jsp 中的按鈕是 Submit,


所以對應上我們需要將 Forward Name 更改成 Submit。

我們一樣的,在/browse 中按下右鍵,選 Run,準備執行程式。

57 頁
11/1/2005
Oracle JDeveloper 系列文章

我們看到 JSP Page 已經開起來,可以看到 Master-Detail Page。

我們選到員工編號是 122 的,準備幫他改所屬直管,點一下 Select。

會切換到 122 的編輯畫面,我們可以將 ManagerId 更改一下,拉下來會顯示所


有主管資料,我們將其選到 101 的主管,並且按下 Submit。

58 頁
11/1/2005
Oracle JDeveloper 系列文章

可以看到員工編號 122 已經不屬於主管 100 的管轄範圍,所以我們已經為員工編


號是 122 的員工,更改了主管,是不是很方便呢。

本章以經結束,示範了 ADF Application 的作法,可以看到 ADF Application 非常


方便,建立一個 Master-Detail 非常方便,所以利用 Data Control 來幫我們建立
Application,可以充分利用 Oracle JDeveloper 和 ADF 的結合,快速建立整個 Web
Page 的框架,就可以加快開發速度。

PS:持續努力喔,期待下一章喔。

Jonas

59 頁
11/1/2005

You might also like