程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 使用NetBeans IDE執行創建、檢索、更新和刪除數據庫行的Web應用程序

使用NetBeans IDE執行創建、檢索、更新和刪除數據庫行的Web應用程序

編輯:關於JAVA

本教程介紹如何使用 NetBeans IDE 6.5 和 JSF 1.2 (Woodstock) 組件構建 能夠創建、檢索、更新和刪除數據庫行的 Web 應用程序。該應用程序提供了一個 主數據下拉列表和一個同步的詳細信息表。該應用程序的用戶能夠從關聯數據庫 添加、更新和刪除詳細信息表中的記錄。

本教程使用的概念在更基本的教程中有介紹。如果您對 IDE 及其設 計組件尚未有基本的了解,請先閱讀一些介紹性教程,如可視化 Web JSF 應用程 序開發入門和使用數據綁定組件訪問數據庫。

預計時間:45 分鐘

目錄

創建項目

設計頁面

設置數據庫

配置下拉列表

配置表

更改列組件

配置表的虛擬表單

添加事件和初始化代碼

測試應用程序 - 第 1 部分

添加插入功能

向表中添加更多組件

添加應用程序 - 第 2 部分

修改該頁面以保存行集

創建 maxTripRowSet

將用戶更改保存到數據庫中

測試應用程序 - 第 3 部分

添加刪除功能

為每行添加一個刪除按鈕

添加事件代碼

測試應用程序 - 第 4 部分

添加還原功能

添加反向更改按鈕

配置虛擬表單

測試應用程序 - 第 5 部分

結束語

要學習本教程,您需要具備以下軟件和資源。

軟件或資源 要求的版本 NetBeans IDE 6.5 Java 版本 Java 開發工具包(Java Developer Kit,JDK) 版本 6 或版本 5 JavaServer Faces 組件/
Java EE 平台 1.2(帶有 Java EE 5*)或
1.1(帶有 J2EE 1.4) GlassFish 應用服務器 2.1 Travel 數據庫 必需

* 要利用 NetBeans IDE 的 Java EE 5 功能,請使用完全符合 Java EE 5 規范的應用服務器,例如 GlassFish Server Open Source Edition 2.1 UR2。如果使用的是其他服務器,請查閱發行說明和常見問題解答,了解已知問題 和解決方法。有關支持的服務器和 Java EE 平台的詳細信息,請參見發行說明

有關使用其他數據庫完成本教程的信息,請參見插入、更新和刪除 wiki。

創建項目

在本教程中,您將創建一個包含單個頁面的 Web 應用程序。首先需 要對頁面進行布局,該頁面包括一個人及其相應行程,如下圖所示。

初始頁面布局

設計頁面

創建一個使用可視化 Web JavaServer Faces 框架且名為 InsertUpdateDelete 的新 Java Web 應用程序。該應用程序的 Page1.jsp 文件 將在可視設計器中打開。

從組件面板的“WoodStock 基本”部分拖放一個“下拉列表”組件到 頁面的左上角。在“屬性”窗口中,將其 id 屬性更改為 personDD。

右鍵雙擊“下拉列表”組件並選擇“添加綁定屬性”。

從組 件面板的“Woodstock 基本”部分拖放一個“消息組”組件到下拉列表的右側 。

“消息組”組件顯示驗證錯誤和轉換錯誤,以及通過 info 和 error 方法寫入 Java Server Faces 上下文中的消息。這些消息有助於調試項目。

在其他兩個組件下面放置一個“表”組件。

在“導航”窗口 中,展開 "Page1" 節點直至看到 form1 組件。 右鍵單擊 "form1" 節點並選擇“添加綁定屬性”。

設置數據庫

在本節中,您將在 IDE 中設置 Travel 數據庫和 MySQL 數據庫服務 器。

請確認您的機器已經安裝並正在運行 MySQL 數據庫服務器。有關連 接到 MySQL 數據庫的更多信息,請參見連接到 MySQL 數據庫

在“服務”窗口中,右鍵單擊“MySQL 服務器”節點,然後選擇“創 建數據庫”。

此時將打開“創建新的數據庫”對話框。

從“新數據庫名” 下拉列表中,選擇“樣例數據庫:travel”並單擊“確定”。

Travel 數據庫將出現在“服務”窗口的“MySQL 服務”節點下面 。

“服務”窗口中的 VIR 數據庫

配置下拉列表

打開“服務”窗口,展開“數據庫”節點,連 接到 Travel 數據庫。

如果 Travel 數據庫標記的 jdbc 節點是斷開的 ,並 且不能展開節點,則表示 IDE 並未連接到數據庫。 右鍵單擊 Travel 的 jdbc 節點,並從彈出式菜單中選擇“連接”

展開 Travel 數據庫的 jdbc 節點 ,然後展開“表”節點。

注意:在本教程的余下部分中,將把 Travel 數據庫的 jdbc 節點稱 作 Travel 節點。

將 person 節點拖放到可視設計器的“下拉列表”組件 中。

“導航”窗口中的 Page1 部分顯示了一個 personDataProvider 節點 ,SessionBean1 部分中顯示了一個 personRowSet 節點。

右鍵單擊“下 拉列表”組件,並從彈出式菜單中選擇“更改時自動提交”。

此設置導致的結果是,只要從該列表中選定一個新值就會將該頁面發 送至服務器。

右鍵單擊“下拉列表”組件,並從彈出式菜單中選擇“配置 虛擬表單”。

請注意在隨後出現的對話框中,personDD 出現在窗口的左上角,表示 已選定下拉列表。

單擊“新建”並在“名稱”字段中鍵入 person。雙擊 Participate 列下面的字段並將其設置為 Yes,對 Submit 列執行相同操作,如 下圖所示。

配置虛擬表單

通過使用虛擬表單,該應用程序避免了在“ 表”中進行不必要的數據驗證。

單擊“確定”。

在可視設計器工具欄中單擊“顯示虛擬表單 ”按鈕 ,如下圖所示。

查看虛擬表單,您可以看到可視設計器組件和其他配置過的虛擬表 單間的關系。

顯示虛擬表單

配置表

將“服務”窗口中的 "travel > Tables > trip" 節點拖放至可視設計器的“表”組件上。

如果經提示要選擇一個目標組件來接收拖放的節點,請選擇 table1 並單擊“確定”。

右鍵單擊“表”組件並從彈出式菜單中選擇“表布局”

“表布局”對話框示了剛創建的 tripDataProvider 中的可用字段, 讓您控制在表中顯示哪些字段。

使用 < 按鈕將 trip.tripid、 trip.personid 和 trip.lastupdated 從右側的“已選定”列表中移除,如下圖 所示。

將“表”綁定到數據庫提供器

單擊“選項”標簽,將“標題”更改為 Trips Summary,並單擊“確 定”。

可視設計器中的“表”組件在外觀上應與下圖一致。注意如果您的列 的順序與圖示中不同,可以通過重新打開“表布局”對話框,單擊“列”標簽並 使用“向上”和“向下”按鈕來對列進行重新排列。

 Page1 表布局

在“導航”窗口中,右鍵單擊 SessionBean1 下面的 tripRowSet,並 從彈出式菜單中選擇“編輯 SQL 語句”。

此時將打開 SQL 查詢編輯器。

在靠近窗口中間的網格區, 右鍵單擊 personid 行並選擇“添加查詢條件”,如下圖所示。

添加查詢條件

在“添加查詢條件”對話框中,將“比較”下拉列表設置為 =Equals 並選中“參數”單選按鈕,然後單擊“確定”。

“添加查詢條件”對
話框

字符 =? 出現在 PERSONID 的條件字段中,"WHERE TRAVEL.TRIP.PERSONID=?" 出現在編輯器底部 SQL 面板的 SQL 語句的結尾 處。

關閉 tripRowSet 的 SQL 編輯器。

更改列組件

現在,將列內容更改為可編輯字段,准備好添加將新行程插入到數據 庫中的新功能。這樣,通過將其他組件嵌入到“表”組件中,您就利用了“表” 組件的復合性質

右鍵單擊“表”組件並選擇“表布局”。

此時將打開“表布局”對話框。

在“列”標簽中,從右側的“ 已選定”列表中選擇 trip.depdate。在對話框底部的“列詳細信息”處,將“組 件類型”從靜態文本改為文本字段,如下圖所示,單擊“應用”。

更改列外觀

對 trip.depcity 和 trip.destcity 執行相同操作。

從“已選定”列表中選擇 trip.triptypeid 並將“組件類型”從“ 靜態文本”更改為“下拉列表”。

單擊“確定”。

將 "Travel > Tables > triptype" 節點拖放至“表”組件中的“下拉列表”。如果打開了“選擇目 標”對話框,請選擇 dropDown1 並單擊“確定”。

此操作將創建 triptypeDataProvider。

為“表”配置“虛擬表單”

接下來,為表中的輸入組件創建一個虛擬表單。虛擬表單確保:當對 personDD 下拉列表的更改提交至該頁面時,可不對輸入組件進行驗證和轉換。只 要用戶從下拉列表中選擇一個新人,表中就會顯示正確信息。

在導航窗口中,在表中使用 Ctrl-Click 組合鍵從三個包含文本字段 的列中選擇三個“文本字段”組件,從triptypeid 列中選擇“下拉列表”組件。

右鍵單擊一個選定的組件並從彈出式菜單中選擇“配置虛擬表單”。

在“配置虛擬表單”對話框中,請確保三個“文本字段”和“下拉列 表”列出在窗口的左上角。如果與下圖所列內容不一致,請關閉對話框,重新選 擇,再試一次。若正確列示,請單擊“新建”。

將新虛擬表單的名稱更改 為 save,將 Participate 設置的名稱更改為 Yes,如下圖所示,然後單擊“確 定”。

配置“表元素”的虛擬表單

添加“事件”和“初始化”代碼

現在,將 “personDD下拉列表”組件與“表”組件關聯起來,以實 現以下行為:當用戶從列表中選擇一個人時,該人的行程將出現在表中。

雙擊“personDD 下拉列表”組件以創建一個值更改事件方法並在該 方法中打開 Java 編輯器。

在 personDD_processValueChange 方法中, 將 粗體 文本添加到代碼樣例 1 中,然後按下 Alt-Shift-F 重新設置代碼。

代碼樣例 1:下拉列表事件處理程序

   public void 

personDD_processValueChange(ValueChangeEvent event) {
       Object selectedPersonId = personDD.getSelected();
       try {
           personDataProvider.setCursorRow(
                   personDataProvider.findFirst

("PERSON.PERSONID",
                   selectedPersonId));
           getSessionBean1().getTripRowSet().setObject(1, 

selectedPersonId);
           tripDataProvider.refresh();
           form1.discardSubmittedValues("save");
       } catch (Exception e) {
           error("Cannot switch to person " + 

selectedPersonId);
           log("Cannot switch to person " + selectedPersonId, 

e);
       }
   }

在 try 子句中,form1.discardSubmittedValues ("save") 語句保證了:只要用戶從下拉列表中選擇新的人,表中顯示 的當前行程信息將被和該選定人相關的新信息所替換。回想:表中所有顯示行程 信息的用戶界面元素都在名為 save 的虛擬表單中。

還需注意,事件處理程序並未拋出異常。 而是將其記錄到 server.log 文件中。 事件處理程序也調用了一個 error 方法,即:在錯誤事件 中,在“消息組”組件中顯示消息。

注意:在 Oracle 數據庫中,將 PERSONID 前面的 PERSON 忽略掉 。

在 Java 源代碼中,找到 prerender 方法,或者使用 Ctrl-F 組 合鍵搜索 prerender。 將以下 粗體 代碼添加到該方法中。

代碼樣例 2:Prerender 方法

public void prerender() {
       if ( personDD.getSelected() == null ) {
           Object firstPersonId = null;
           try {
               personDataProvider.cursorFirst();
               firstPersonId = personDataProvider.getValue

("PERSON.PERSONID");
               personDD.setSelected(firstPersonId);
               getSessionBean1().getTripRowSet().setObject(
                       1, firstPersonId);
               tripDataProvider.refresh();
           } catch (Exception e) {
               error("Cannot switch to person " +
                       firstPersonId);
               log("Cannot switch to person " +
                       firstPersonId, e);
           }
       }
   }

注意:在 Oracle 數據庫中,將 PERSONID 前面的 PERSON 忽略掉 。

在 Java 編輯器中單擊鼠標右鍵,選擇“格式”將代碼正確對齊。

測試應用程序 - 第 1 部分

單擊主工具欄中的“運行主項目”按鈕,運行項目。

注意:缺省情況下,創建項目時會啟用保存時編譯功能,因此在 IDE 中運行應用程序無需首先編譯代碼。有關保存時編譯功能的更多信息,請參見創 建、導入和配置 Java 項目指南的“保存時編譯”一節。

該頁面加載到浏覽器後,下拉列表中填充有姓名,且表中填有數據。 從列表中選擇一個不同的姓名時,和該姓名相關的行程將出現在表中。

添加插入功能

在本節中,您將添加一項功能,實現通過向數據庫插入一個行集來向 表中添加一項行程。首先,為表的文本字段提供“消息”組件。這些組件確保用 戶在輸入不正確的信息時能看到錯誤。然後,向頁面添加一個“按鈕”組件,使 用戶能夠向數據緩沖區添加新行。

向“表”中添加更多組件。

單擊“設計”按鈕,在“可視設計器”中查看 Page1。

從“組件面板”的 Woodstock 基本節,將一個“消息”組件拖至該 表前三列中每列最頂部的文本字段。

選擇第一個“消息”組件。在“屬性”窗口中,滾動至 for 屬性並 從下拉列表中選擇 textField1。 當該消息和文本字段正確關聯起來時,消息文 本發生改變顯示這種關聯,如下圖所示。

將第二個“消息”組件的 for 屬性設為 textField2。

將第三個“消息”組件的 for 屬性設為 textField3。

確保您的應用程序的外觀如下圖所示。

將“消息組件”和“
文本字段”關聯起來

從“組件面板”的“Woodstock 基本”部分中,拖放一個“按鈕”組 件到 Page1 中,並將其置於“表”組件上,靠近第二列頂部。

注意:存在一個已知的問題,會對 IE7 中 JSF 1.2 按鈕組件 的寬度造成影響。解決方案是將該“按鈕”組件置於一個布局組件(“網格面板 ”、“組面板”或“布局面板”)中。重新設定布局組件的大小會自動重新設定 “按鈕”組件的大小。

更改按鈕中的文本,以添加行程。

在“屬性”窗口中,將按鈕的 id 屬性設置為 add。

右鍵單擊“按鈕”組件並選擇 添加綁定屬性。

在可視設計器中,雙擊該按鈕打開 Java 編輯器,使該按鈕的插入點 位於 add_action 事件處理方法。

將下面以粗體顯示的代碼添加到該按鈕的事件處理方法中:

樣例代碼 3:添加行程操作代碼

public String add_action() {
        try {
            RowKey rk = tripDataProvider.appendRow();
            tripDataProvider.setCursorRow(rk);
            tripDataProvider.setValue("TRIP.TRIPID", new 

Integer(0));
            tripDataProvider.setValue("TRIP.PERSONID", 

personDD.getSelected());
            tripDataProvider.setValue("TRIP.TRIPTYPEID", new 

Integer(1));
        } catch (Exception ex) {
            log("Error Description", ex);
            error(ex.getMessage());
        } 
        return null;
    }

注意:對於 Oracle 數據庫,請忽略 setvalue 語句中的 TRIP。

雙擊 Java 編輯器並選擇“修復導入”以解決找不到 RowKey 的錯 誤。

IDE 將下面的包添加到導入語句的 Page1.java 塊中:

導入 com.sun.data.provider.RowKey;

測試應用程序 - 第 2 部分

單擊“運行主項目”按鈕運行該項目

注意:缺省情況下,創建項目時會啟用保存時編譯功能,因此在 IDE 中運行應用程序無需首先編譯代碼。有關保存時編譯功能的更多信息,請參見創 建、導入和配置 Java 項目指南的“保存時編譯”一節。

Web 浏覽器將加載該頁面,並且顯示了“添加行程”按鈕,如下圖所 示。每次單擊該按鈕時,表的底部就新添加一行空行。您可以編輯行中的信息, 但由於您尚未提供保存行集的機制,當從下拉列表中選擇一個不同姓名時,所做 更改將丟失。

部署應用程序,測試 2

修改頁面以保存行 集

在本節中,您將向該項目添加第二個行集。該行集用於計算使用的最 大行程 ID。

創建 maxTripRowSet

單擊編輯器窗口的“設計”,返回到可視設計器的 Page1。

打開“服務”窗口,選擇 "Databases > travel > Tables > trip table",將其拖放到導航窗口的 SessionBean1 節點上。

將 TRIP 表
拖放到 SessionBean1 上

此操作將為 SessionBean1 創建兩個新的子節 點:tripDataProvider 和 tripRowSet1。

在“添加新數據提供器”對話框中,選中“創建 SessionBean1/tripRowSet1”單選按鈕,將數據提供器名稱更改為 maxTripRowSet,單擊“確定”。

此操作將在 SessionBean1 中創建 maxTripDataProvider 和 maxTripRowSet。

在導航窗口中,雙擊 "SessionBean1 > maxTripRowSet" 以打開“查詢編輯器”。單擊“源代碼”面板(頂部往下 第三個面板)。刪除在該處找到的現有 SQL 查詢並輸入以下查詢:

從行程中選擇 MAX(trip.tripid)+1 作為 MAXTRIPID

針對下一步要添加的“保存”按鈕,使用操作處理程序中的 MAXTRIPID 值。

注意:對於 Oracle 數據庫,請忽略 trip 前綴。

關閉“查詢編輯器”。

注意:“查詢編輯器”的圖形編輯器不支持此查詢。如果看到一個 提示詞法錯誤的警告對話框,您可以單擊“繼續”將其安全地關閉。</

將用戶更改保存到數據庫中

在“表”組件上面靠近第一列頂部的位置放一個“按鈕”組件。

將按鈕的文本由“按鈕”更改為“保存更改”。

右鍵單擊按鈕組件並選擇 “添加綁定屬性”。

在“屬性”窗口中,將其 id 屬性更改為 save。

右鍵單擊“保存更改按鈕”並從彈出式菜單中選擇“配置虛擬表單”

在“配置虛擬表單”對話框中,確保 save 顯示於列表的左上角,這 樣您在此窗口中做的更改將應用到“保存更改按鈕”。然後,選擇保存虛擬表單 ,將“提交”值更改為 "Yes",單擊“確定”。

在可視設計器中,雙擊“保存更改按鈕”以打開 Java 編輯器。在 Java 編輯器中,該按鈕的插入點位於 save_action 事件處理方法中。

將下面以粗體顯示的代碼添加到該按鈕的事件處理方法中:

代碼樣例 4:保存操作代碼

    public String save_action() {
        try {
            // Get the next key, using result of query on MaxTrip data 

provider
            CachedRowSetDataProvider maxTrip = getSessionBean1

().getMaxTripDataProvider();
            maxTrip.refresh();
            maxTrip.cursorFirst();
            long newTripId = ((Long) maxTrip.getValue

("MAXTRIPID"));
            // Navigate through rows with data provider
            if (tripDataProvider.getRowCount() > 0) {
                tripDataProvider.cursorFirst();
                do {
                    if (tripDataProvider.getValue

("TRIP.TRIPID").equals
                       (new Long(0))) {
                        tripDataProvider.setValue

("TRIP.TRIPID",
                        new Long(newTripId));
                        newTripId++;
                    }
                } while (tripDataProvider.cursorNext());
            }
            tripDataProvider.commitChanges();
        } catch (Exception ex) {
            log("Error Description", ex);
            error("Error :"+ex.getMessage());
        }
        return null;
    }

注意:對於 Oracle 數據庫,忽略 setValue 語句中的 TRIP。 對 於 Java DB 數據庫,使用 Integer 代替 Long。

測試應用程序 - 第 3 部分

單擊“運行主項目”按鈕運行該項目。

注意:缺省情況下,創建項目時會啟用保存時編譯功能,因此在 IDE 中運行應用程序無需首先編譯代碼。有關保存時編譯功能的更多信息,請參見創 建、導入和配置 Java 項目指南的“保存時編譯”一節。

該應用程序功能如下所示:

您可以添加並保存行程。該行程隨後出現並保留在表中。如果選擇一 個不同的人,然後再返回到此人,就會看到您添加的行程。

可編輯現有行程信息並保存更改。

若在日期字段輸入非日期信息,應用程序將提供一條錯誤消息。

在保存前您可以多次單擊“添加行程”,作為一次性添加多行的簡便 方法。保存更改時仍為空的行將作為空行保存。

如果在單擊“保存更改”前轉向一個不同的人,將丟失所做的所有 更新。

如果修改一些值,然後單擊一個列頭根據該列進行排序,“表”組 件會記住即將做的更改,該更改隨後將被保存。

添加刪除功能

在本節中,您將為表添加刪除功能。用戶可使用此功能通過移除數據 庫中的一行來刪除一項行程。如本教程所示,“刪除”按鈕的操作是直接的,並 不需要“保存更改”按鈕來刪除數據庫中的行。事實上,由於“刪除”按鈕事件 處理程序使用 commitChanges 方法,它也保存了所有即將做出的更改,正如“保 存更改”按鈕所做的那樣。

為每行添加一個“刪除按鈕”

在編輯器窗口中單擊“設計” ,返回到可視設計器的 Page1,然後右鍵單擊 "Trips Summary" 表並 從彈出式菜單中選擇“表布局”。

此時將打開“表布局”對話框。

單擊“新建”創建新列。

在“已選定”列表中選擇新列的列 名之後,請在“列詳細信息”處做出以下更改:

頁眉和頁腳文本:刪除“頁眉和頁腳”文本字段中的任何缺省文本, 保留空白。

組件類型:按鈕

值表達式:刪除

寬度:刪除任何缺省值並保留空白。

水平對齊:居中

垂直對齊:居中

單擊“確定”。

選擇表格中最頂端的“刪除”按鈕,並在“屬性窗口”中,將id 屬 性的值設置為 delete。

添加事件代碼。

右鍵單擊表列中最頂端的按鈕組件,並選擇“添加綁定屬性”。

在“導航窗口”中,展開 Page1 節點直到你能看見 TableRowGroup1 組件。右鍵單擊 TableRowGroup1 並選擇 添加綁定屬性。

雙擊“刪除”列的第一個按鈕來打開 Java 編輯器,焦點處於 delete_action 事件處理方法中。

將下面以粗體顯示的代碼添加到該按鈕的事件處理方法中:

代碼樣例 5:刪除操作代碼

    public String delete_action() {
        form1.discardSubmittedValues("save");
        try {
            RowKey rk = tableRowGroup1.getRowKey();
            if (rk != null) {
                tripDataProvider.removeRow(rk);
                tripDataProvider.commitChanges();
                tripDataProvider.refresh();}
        } catch (Exception ex) {
            log("ErrorDescription", ex);
            error(ex.getMessage());
        }
        return null;
    }

測試應用程序 - 第 4 部分

單擊“運行主項目”按鈕運行該項目。

注意: 缺省情況下,創建項目時會啟用保存時編譯功能,因此在 IDE 中運行應用程序無需首先編譯代碼。欲了解更多有關保存時編譯功能的信息 ,請參見創建、導入和配置 Java 項目指南的“保存時編譯”一節。

下圖顯示了運行中的應用程序。

部署後,應能從表中刪除一行,從而將其從數據庫中移除。刪除操作 也將進行所有即將對數據庫做的更改。

測試應用程序,第 4 部分

添加還原功能

現在,為頁面添加還原功能。使用此功能,用戶將能夠放棄編輯還原 到之前保存過的數據。請注意,還原功能不會返回已保存或已刪除的行;“保存 更改”按鈕和“刪除”按鈕都會更改數據庫。

添加還原更改按鈕

在編輯器窗口中單擊“設計”,返回到可視設計器的 Page1,然後從 “組件面板”拖放一個“按鈕”組件到 Page1。 將新“按鈕”置於“添加行程按 鈕”右側。

將按鈕的文本更改為“還原更改”。

在屬性窗口中,將“按鈕”組件的 id 屬性更改為 revert。

右鍵單擊“按鈕”組件並選擇“添加綁定屬性”。

雙擊“還原更改”按鈕,在 Java 編輯器中打開 revert_action 方 法 。

將下面代碼樣例中以粗體顯示的代碼添加到 revert_action 方法中 。

代碼樣例 6:還原操作代碼

 public String revert_action() {
        form1.discardSubmittedValues("save");
        try {
            tripDataProvider.refresh();
        } catch (Exception ex) {
            log("Error Description", ex);
            error(ex.getMessage());
        }
         return null;
    }

配置虛擬表單

當前配置的應用程序出現了一些不良行為。例如,如果用戶在現有 行的第一列輸入一個無效日期,然後單擊“添加”按鈕,操作則會失敗,這是因 為日期轉換錯誤阻止了表單提交。用戶單擊“添加”按鈕時,其期待的行為是: 放棄處理表的輸入字段,這樣就可以不考慮即將對現有表進行的編輯而添加新行 。

同樣,用戶單擊“還原”按鈕時,其目的是為了放棄所有編輯操作 ,因此在該情況下也要忽略編輯操作。然而,用戶單擊“刪除”按鈕時,仍需進 行驗證,這是因為此按鈕不僅刪除行,還提交即將做出的更改,這就要求先處理 該輸入字段。

為確保在用戶單擊“添加”或“還原”按鈕時,頁面的輸入字段放棄 處理(包括驗證檢查),應使這些按鈕提交一份虛擬表單。可使這兩個按鈕提交 同一份虛擬表單,因為它們都需要提交一份無內容的虛擬表單。

在“導航 ”窗口中,展開 Page1 節點,以查看所有組件。選擇“添加”、“還原”和“刪 除”按鈕,然後單擊鼠標右鍵並從彈出式菜單中選擇“配置虛擬表單”。

在“配置虛擬表單”窗口中,添加、還原和刪除應出現在左上角,以 顯示該按鈕的選定狀態。

在“配置虛擬表單”窗口中,單擊“新建”,將新虛擬表單命名為 add/revert/delete,將“提交”設置為 "Yes"。 單擊“確定”。

為“添加”、“還原”和“刪除”按鈕配置虛擬表單

測試應用程序 - 第 5 部分

單擊“運行主項目”按鈕運行該項目

注意:缺省情況下,創建項目時會啟用保存時編譯功能,因此在 IDE 中運行應用程序無需首先編譯代碼。有關保存時編譯功能的更多信息,請參見創 建、導入和配置 Java 項目指南的“保存時編譯”一節。

下圖顯示了運行中的應用程序。

部署後,您將能夠執行以下功能:

從下拉列表中選擇一個姓名,顯示該人的行程摘要。

編輯現有行程信息並將更改保存至數據庫。

用不正確的日期格式編輯現有行程信息,單擊“添加行程”添加新行 ,或單擊“還原更改”放棄編輯。

為表添加新行,添加行程字段,將更改保存至數據庫。

從表(和數據庫中)中刪除一行。

放棄所做編輯在數據庫中 還原至最近保存過的數據。

測試應用程序 - 第 5 部分

結束語

在本教程中,您將“表”組件、“文本字段”組件和“下拉列表”組 件和數據庫的信息關聯起來。您設置了組件屬性,添加 prerender 和事件代碼以 從數據庫中插入、更新和刪除數據,並還原輸入表單的更改。使用了虛擬表單, 使應用程序可只使用一個頁面,也使在添加行或還原更改時提交的數據繞過驗證 檢查。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved