亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

利用NetBeans的Visual Web Pack用拖拉方式建立

系統 2349 0

執行插入、更新和刪除操作

<!-- END VNV3 PAGETITLE, two-level variation --><!-- BEGIN WRAPPER TABLE, 2 COLUMN, MAIN/RIGHT --><!-- BEGIN CENTRAL COLUMN COMPONENTS --><!--startindex--><!-- ============ --><!-- MAIN CONTENT --><!-- ============ --> <!-- BEGIN VCD4 BYLINE AND TOOLS -->
2006 年 12 月 [修訂號:V1-1]
<!-- END VCD4 BYLINE AND TOOLS --><!-- BEGIN VCD1 OVERVIEW COMPONENT -->

本教程介紹了如何使用 NetBeans Visual Web Pack 5.5 構建一個可以創建、檢索、更新和刪除數據庫行的 Web 應用程序。該應用程序提供一個主數據的下拉列表以及一個同步的詳細信息表。該應用程序的用戶可以在詳細信息表及其關聯數據庫中添加、更新和刪除記錄。

本教程使用了其他基礎教程中介紹的一些概念。如果您不具備 IDE 及其設計組件的基本知識,請考慮首先閱讀基礎教程,如 NetBeans Visual Web Pack 5.5 入門指南 使用數據綁定組件訪問數據庫

<!-- END VCD1 OVERVIEW COMPONENT --><!-- BEGIN VCD5 ANCHOR LINKS COMPONENT -->

目錄

- 創建項目
- 添加插入功能
- 修改頁面以保存行集
- 添加刪除功能
- 添加恢復功能
- 小結
<!-- END VCD5 ANCHOR LINKS COMPONENT -->

本教程將使用以下資源

NetBeans Visual Web Pack 5.5 可以與所有支持的服務器以及 Java EE 1.4 和 Java EE 5 平臺配合使用。本教程向您介紹了 Visual Web Pack 的各種功能,這些功能需要利用下表中帶有復選標記的資源。有關支持的服務器和 Java EE 平臺的詳細信息,請參見 NetBeans Visual Web Pack 5.5 安裝說明

應用服務器 Sun Java System Application Server 9
Tomcat
JBoss
BEA WebLogic
JavaServer Faces 組件/
Java EE 平臺
1.2/Java EE 5*
1.1/J2EE 1.4
Travel 數據庫 必需
BluePrints AJAX 組件庫 不是必需的

* 該教程發布時,只有 Sun Java System Application Server 支持 Java EE 5。

<!-- END RESOURCE MATRIX --><!-- BEGIN EXAMPLES BOX --><!-- <table border="0" cellpadding="2" cellspacing="0"> <tr> <td> <div class="headerpadding2"><b>Example used in this tutorial</b></div> </td> </tr> <tr valign="top"> <td> <div class="headerpadding2"> &raquo;&nbsp;<a href="inserts_updates_deletes/insert_update_delete_ex.zip">insert_update_delete_ex.zip (zip)</a> </div> </td> </tr> </table> --><!-- END CODE EXAMPLES BOX -->

創建項目

在本教程中,將創建包含一個頁面的 Web 應用程序。您可以先從設計頁面布局入手,該頁面包含一個人名及其相應的行程,如下圖所示。

<!-- BEGIN FIGURE COMPONENT -->
圖 1 :初始頁面布局
<!-- END FIGURE COMPONENT -->
設計頁面
  1. 創建一個新的 Visual Web 應用程序,并將其命名為 InsertUpdateDelete
  2. 將一個“下拉列表”組件從組件面板的“基本”類別拖動到該頁的左上角。在“屬性”窗口中,將其 id 屬性更改為 personDD
  3. 將一個“消息組”組件從組件面板的“基本”類別拖放到下拉列表的右側。

    “消息組”組件可用來顯示驗證錯誤和轉換錯誤,以及由 info() error() 方法寫入到 Java Server Faces 上下文的消息。如果需要調試項目,這些消息將會非常有用。
  4. 將一個“表”組件放在這兩個組件的下方。

配置下拉列表
  1. 打開“運行環境”窗口,展開“數據庫”節點并檢查是否已連接 TRAVEL 數據庫。

    如果 TRAVEL 數據庫的 jdbc 節點標記顯示為連接中斷,并且無法展開該節點,則表明 IDE 未連接該數據庫。要連接 TRAVEL 數據庫,請右鍵單擊 TRAVEL 數據庫的 jdbc 節點,然后從彈出式菜單中選擇“連接”。如果出現“連接”對話框,請輸入 travel 作為口令,然后單擊“確定”。如果看不到 TRAVEL 數據庫的 jdbc 節點,請參見 NetBeans Visual Web Pack 5.5 安裝說明 以了解如何為 IDE 提供可用的數據庫。
  2. 展開 TRAVEL 數據庫的 jdbc 節點,然后展開“表”節點。

    注意: 在本教程的其余部分中,將 TRAVEL 數據庫的 jdbc 節點稱為 "Travel" 節點。
  3. 將 "PERSON" 節點拖動到可視設計器的下拉列表上。

    “概要”窗口的 "Page1" 部分中將顯示 "personDataProvider" 節點,"SessionBean1" 部分中將顯示 "personRowSet" 節點。
  4. 右鍵單擊“下拉列表”組件,然后從彈出式菜單中選擇“更改時自動提交”。

    此設置使得每當您從列表中選擇新值時,則會將該頁面發送到服務器。
  5. 右鍵單擊下拉列表,然后從彈出式菜單中選擇“配置虛擬表單”。

    在出現的對話框中,請注意 personDD 顯示在窗口的左上角中,這表明下拉列表已被選定。
  6. 單擊“新建”。在“名稱”列中輸入 person 。雙擊“參與”列下面的字段,并將其設置為“是” ,然后對“提交”列執行相同的操作,如下圖所示。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 2 :配置虛擬表單
    <!-- END FIGURE COMPONENT -->
    通過使用虛擬表單,應用程序可避免對表中的數據進行不必要的驗證。
  7. 單擊“確定”。
  8. 單擊可視設計器工具欄中的“顯示虛擬表單”按鈕,如圖 3 所示。

    通過查看虛擬表單,您可以看到可視設計器中的組件與您已經配置的任何虛擬表單之間的關系。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 3 :顯示虛擬表單
    <!-- END FIGURE COMPONENT -->

配置表
<!-- Start Here with InsertUpdateDelete12-preTableConfig -->
  1. 將 "Travel" >“表”> "TRIP" 節點從“運行環境”窗口拖放到可視設計器中的“表”組件上。
  2. 右鍵單擊該表,然后從彈出式菜單中選擇“表布局”。

    該對話框顯示了您剛創建的 tripDataProvider 中可用的字段,并允許您控制要在表中顯示哪些字段。
  3. 使用 "<" 按鈕,從右側的“選定”列表中刪除 TRIP.TRIPID、TRIP.PERSONID 和 TRIP.LASTUPDATED,如下圖所示。

    圖 4 :將表綁定到數據提供器
    <!-- END FIGURE COMPONENT -->
  4. 單擊“選項”標簽,并將標題更改為 Trips Summary
  5. 單擊“確定”。

    現在,可視設計器中的“表”組件應如下圖所示。請注意,如果未按下圖順序顯示各列,可通過重新打開“表布局”對話框,單擊“列”標簽并使用“上移”和“下移”按鈕重新對其進行排列。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 5 :Page1 表布局
    <!-- END FIGURE COMPONENT -->
  6. 在“概要”窗口中,右鍵單擊 "SessionBean1" 下的 "tripRowSet",然后從彈出式菜單中選擇“編輯 SQL 語句”。

    SQL 查詢編輯器將顯示在編輯區域中。
  7. 在窗口中心附近的網格區域,在 PERSONID 行中單擊鼠標右鍵,然后選擇“添加查詢條件”,如下圖所示。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 6 :添加查詢條件
    <!-- END FIGURE COMPONENT -->
  8. 在對話框中,將“比較”下拉列表設置為“= 等于”并選中“參數”單選按鈕,然后單擊“確定”。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 7 :“添加查詢條件”對話框
    <!-- END FIGURE COMPONENT -->
    字符 "=?" 將出現在 PERSONID 的“條件”字段中,而條件 "WHERE TRAVEL.TRIP.PERSONID=?" 則出現在編輯器底部 SQL 窗格中的 SQL 語句結尾處。
  9. 關閉 tripRowSet 的 SQL 編輯器。

更改列組件

現在,將列內容更改為可編輯的字段,以準備實現將新行程插入到數據庫中的功能。為此,可通過在“表”組件中嵌套其他組件以利用其復合特性。
  1. 右鍵單擊“表”組件,然后選擇“表布局”。

    將打開“表布局”對話框。
  2. 在“列”標簽中,從右側的“選定”列表中選擇 "TRIP.DEPDATE"。在對話框底部的“列詳細信息”區域中,將“組件類型”從“靜態文本”更改為“文本字段”,如下圖所示。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 8 :更改列的外觀
    <!-- END FIGURE COMPONENT -->
  3. 對 TRIP.DEPCITY 和 TRIP.DESTCITY 執行相同的操作。
  4. 在“選定”列表中選擇 "TRIP.TRIPTYPEID",然后將“組件類型”從“靜態文本”更改為“下拉列表”。
  5. 單擊“確定”。

    注意: 如果執行上述步驟后表列太寬,則可以通過選擇每列中的第一個組件并拖動其選擇句柄來調整列的大小。
  6. 將 "Travel" >“表”> "TRIPTYPE" 節點拖動到“表”組件中的下拉列表上。

    此操作將創建 triptypeDataProvider
<!-- InsertUpdateDelete12-preEventInit.zip -->

為表配置虛擬表單

接下來,為表中的輸入組件創建一個虛擬表單。通過使用虛擬表單,可以確保在更改 personDD 后提交此頁時,不會對輸入組件進行驗證和轉換。用戶無論何時從下拉列表中選擇新人員,都會在表中顯示正確的信息。
  1. 在可視設計器中,使用 Ctrl 鍵的同時單擊“表”組件中的三個“文本字段”組件和一個“下拉列表”組件。右鍵單擊其中一個選定的組件,然后從彈出式菜單中選擇“配置虛擬表單”。
  2. 在“配置虛擬表單”對話框中,確保窗口左上角列出了三個文本字段和一個下拉列表。如果未按下圖所示的方式列出這些內容,請關閉對話框,重新選擇它們,然后再試一次。如果已正確列出這些內容,則單擊“新建”。
  3. 將新虛擬表單的名稱更改為 save ,將“參與”設置更改為“是”(如下圖所示),然后單擊“確定”以關閉窗口。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 9 :為表元素配置虛擬表單
    <!-- END FIGURE COMPONENT -->

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

現在,將 personDD 下拉列表與“表”組件相關聯以實現以下行為:當用戶從列表中選擇某人時,表中則會顯示出此人的行程。
  1. 雙擊 personDD 下拉列表以創建值更改事件方法(將打開 Java 編輯器,并且插入點將位于該方法內)。
  2. 在值更改事件方法中,找到注釋行 // 待做事項:替換為您的代碼 。使用代碼樣例 1 中的粗體文本替換此行。

    <!-- BEGIN CODE SAMPLE COMPONENT -->
    代碼樣例 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);
           }
                    
                    
       }
    
                  
    <!-- END CODE SAMPLE COMPONENT -->
    位于 try 子句結尾處的 form1.discardSubmittedValues("save") 語句可確保每當用戶從下拉列表中選擇新的人員時,將使用新的所選人員的相關信息替換當前行程信息。請您回想一下,顯示行程信息的用戶界面元素都參與了名為 save 的虛擬表單。請注意,事件處理程序并不拋出異常,而是在 server.log 文件中記錄異常。事件處理程序還將調用 error 方法,當出現錯誤時就會將消息顯示在“消息組”組件中。
  3. 在 Java 源代碼中滾動至 prerender() 方法(或者,如果愿意,請按 Ctrl-F 組合鍵以打開“查找”對話框并搜索 prerender )。將下面以粗體顯示的代碼添加到該方法中。

    <!-- BEGIN CODE SAMPLE COMPONENT -->
    代碼樣例 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);
               }
           }
                    
                    
       }
    
                  
    <!-- END VCD7 CODE SAMPLE COMPONENT -->
  4. 在 Java 編輯器中單擊鼠標右鍵,然后選擇“重新設置代碼格式”以便對代碼進行適當的排列。

測試應用程序 - 第 1 部分

在主工具欄上單擊“運行主項目”按鈕以生成、部署和運行項目。當 Web 瀏覽器呈現此頁面時,您會看到一些名字填充了下拉列表,并且表也由一些數據進行了填充。當您從列表中選擇其他名字時,與該名字關聯的行程將會顯示在表中。

<!-- BEGIN FIGURE COMPONENT -->
圖 10 :部署的應用程序,測試 1
<!-- END FIGURE COMPONENT -->

添加插入功能

<!-- UID-TP1.zip -->在此部分中,通過在數據庫中插入行集,實現將行程添加到表中的功能。首先,為表的文本字段提供“消息”組件。這些功能可以確保當輸入不正確的信息時,用戶能夠看到錯誤消息。然后,在頁面中添加一個按鈕,以便用戶可以通過它將新行添加到數據緩沖區中。
  1. 在可視設計器中查看 Page1。
  2. 在組件面板的“基本”類別中,將“消息”組件分別拖動到表的前三列中最上面的文本字段上。
  3. 選擇第一個“消息”組件。在“屬性”窗口中,滾動至 for 屬性,然后從下拉列表中選擇 textField1 。只有當消息與文本字段正確關聯時,消息文本才會顯示關聯信息,如圖 11 所示。
  4. 選擇第二個“消息”組件并將其 for 屬性設置為 textField2
  5. 將第三個“消息”組件的 for 屬性設置為 textField3

    <!-- BEGIN FIGURE COMPONENT -->
    圖 11 :將“消息”組件與文本字段關聯
    <!-- END FIGURE COMPONENT -->
  6. 在組件面板的“基本”類別中,將一個“按鈕”組件拖動到 Page1 上,并將它放置在“表”組件上方靠近第二列的頂部,如圖 12 所示。
  7. 將其 text 屬性由“ 按鈕 ”更改為 " Add Trip "。
  8. 在“屬性”窗口中,將按鈕的 id 屬性更改為 add
  9. 在可視設計器中,雙擊該按鈕以打開 Java 編輯器,插入點將位于該按鈕的事件處理程序中。
  10. 修改按鈕的事件代碼( add_action() 方法),使其如下所示:

    <!-- BEGIN CODE SAMPLE COMPONENT -->
    代碼樣例 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;
        }
    
                  
    <!-- END CODE SAMPLE COMPONENT -->
  11. 在 Java 編輯器中單擊鼠標右鍵,然后選擇“修復導入”以解決“找不到 RowKey ”的錯誤。

    IDE 將在 Page1.java 的 import 語句塊中添加下列包:

    import com.sun.data.provider.RowKey;

測試應用程序 - 第 2 部分

生成、部署和運行項目。當 Web 瀏覽器呈現此頁面時,將顯示 "Add Trip" 按鈕,如下圖所示。每次單擊該按鈕時,都會在表的底部附加一個新的空行。您可以編輯行中的信息,但由于尚未提供行集的保存機制,因此,從下拉列表中選擇其他名字時,所做的更改將會丟失。

<!-- BEGIN FIGURE COMPONENT -->
圖 12 :部署的應用程序,測試 2
<!-- END FIGURE COMPONENT -->

修改頁面以保存行集

在此部分,您將在項目中添加第二個行集。該行集用于計算已使用的最大行程 ID。
  1. 在編輯器窗口中單擊 "Design" 以返回到可視設計器中的 Page1。
  2. 從“運行環境”窗口中選擇“數據庫”> "Travel" >“表”> "TRIP" 表,然后將它拖動到“概要”窗口中的 "SessionBean1" 節點上。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 13 :將 TRIP 表拖動到 SessionBean1 上
    <!-- END FIGURE COMPONENT -->
    此操作將會打開“添加新的數據提供器”對話框。
  3. 單擊“創建 SessionBean1/tripRowSet1”單選按鈕,將數據提供器的名稱更改為 maxTripRowSet ,然后單擊“確定”。

    注意: 行集在對話框中出現了兩次。這是一個已知問題,請予以忽略。它不會影響本教程中的應用程序。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 14 :將新的數據提供器添加到 SessionBean1 中
    <!-- END FIGURE COMPONENT -->
    此操作將在 SessionBean1 中創建 maxTripDataProvider 和 maxTripRowSet。
  4. 在“概要”窗口中,雙擊 "SessionBean1" > "maxTripRowSet" 以打開查詢編輯器。在源代碼窗格(上數第三個窗格)中單擊鼠標左鍵。刪除此處現有的 SQL 查詢,然后輸入以下查詢:
             SELECT MAX(TRAVEL.TRIP.TRIPID)+1 AS MAXTRIPID FROM TRAVEL.TRIP
          
    MAXTRIPID 值將用在 "Save" 按鈕(接下來,將添加此按鈕)的操作處理程序中。
  5. 關閉查詢編輯器。請注意,查詢編輯器的圖形編輯器不支持此查詢。如果您看到一個提示出現語法錯誤的警報對話框,可通過單擊“繼續”安全地將其關閉。

將用戶更改的內容保存在數據庫中
  1. 將一個“按鈕”組件放在表的第一列上方。
  2. 將按鈕的 text 屬性由“按鈕” 更改為 " Save Changes "。
  3. 在“屬性”窗口中,將其 id 屬性更改為 save
  4. 右鍵單擊 "Save Changes" 按鈕,然后從彈出式菜單中選擇“配置虛擬表單”。
  5. 在“配置虛擬表單”對話框中,確保左上角的列表中顯示的是 save ,以便此窗口中的更改可以應用于 "Save Changes" 按鈕。然后,選擇 save 虛擬表單,將“提交”值更改為“是”并單擊“確定”。
  6. 在可視設計器中,雙擊 "Save Changes" 按鈕以打開 Java 編輯器。在 Java 編輯器中,插入點將位于該按鈕的事件處理程序中。
  7. 修改該按鈕的事件代碼( save_action() 方法),使其如下所示:

    <!-- BEGIN CODE SAMPLE COMPONENT -->
    代碼樣例 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();
                int newTripId = ((Integer) maxTrip.getValue("MAXTRIPID")).intValue();
    
                // Navigate through rows with data provider
                if (tripDataProvider.getRowCount() > 0) {
                    tripDataProvider.cursorFirst();
                    do {
                        if (tripDataProvider.getValue("TRIP.TRIPID").equals
    					   (new Integer(0))) {
                            tripDataProvider.setValue("TRIP.TRIPID",
    						new Integer(newTripId));
                            newTripId++;
                        }
    
                    } while (tripDataProvider.cursorNext());
                };
                tripDataProvider.commitChanges();
            } catch (Exception ex) {
                log("Error Description", ex);
                error("Error :"+ex.getMessage());
            }
                    
                    
             return null;
        }
    
                  
    <!-- END CODE SAMPLE COMPONENT -->

測試應用程序 - 第 3 部分

通過單擊“運行主項目”按鈕以生成、部署和運行項目。應用程序將可以實現以下功能:

  • 可以添加行程并進行保存。行程將會顯示在表中,并且在選擇其他人員后重新返回時,該行程仍然存在。
  • 可以編輯現有的行程信息,并保存所做的更改。
  • 如果在 "Date" 字段中輸入除日期之外的內容,則應用程序將提供一條錯誤消息。
  • 在保存之前可以多處單擊 "Add Trip",這是一次添加多行的簡便方法。
  • 如果在保存之前切換到其他人員,則會丟失所有更新(包括在所添加的行上正在填寫的信息)。
  • 如果修改了某些值,然后單擊某個列標題(使之按該列進行排序),則表組件會記住這些暫掛的更改,并在隨后可以保存這些更改。

添加刪除功能

<!-- InsertUpdateDelete12-TP3.zip -->

現在,將刪除功能添加到表中。利用此功能,用戶能夠通過從數據庫中刪除某行來刪除行程。在本教程中,"Delete" 按鈕的操作是即時的,并且從數據庫中刪除行時并不需要使用 "Save Changes" 按鈕。實際上,由于 "Delete" 按鈕的事件處理程序使用 commitChanges() 方法,因此它也像 "Save Changes" 按鈕一樣保存所有暫掛的更改。


向每行添加 "Delete" 按鈕
  1. 在可視設計器中,右鍵單擊“表”組件,然后從彈出式菜單中選擇“表布局”。

    將打開“表布局”對話框。
  2. 單擊“列”標簽,然后單擊“新建”,將一個新列添加到表中。
  3. 在“選定”列表中選擇新列的名稱后,在“列詳細信息”區域中進行如下更改:

    1. 表頭文本和頁腳文本: <刪除“表頭文本”字段和“頁腳文本”字段中的任何缺省文本,使其保持空白>
    2. 組件類型: 按鈕
    3. 值表達式: Delete
    4. 寬度: <刪除任何缺省值,使其保持空白>
    5. 水平對齊: 居中
    6. 垂直對齊: 居中
    7. 單擊“確定”
  4. 選擇位于表中最上面的 "Delete" 按鈕,并在“屬性”窗口中將 id 屬性設置為 delete

添加事件代碼
  1. 雙擊 "Delete" 列中的第一個按鈕,將打開 Java 編輯器,且插入點位于 delete_action() 事件處理程序中。
  2. 更改 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;
        }
    
                  
    <!-- END CODE SAMPLE COMPONENT -->

測試應用程序 - 第 4 部分

通過單擊“運行主項目”按鈕以生成、部署和運行項目。下圖顯示了運行的應用程序。

部署后,您應該可以從表中刪除行,進而將其從數據庫中刪除。刪除操作還會將所有暫掛的更改提交到數據庫中。

<!-- BEGIN FIGURE COMPONENT -->
圖 15 :測試應用程序,第 4 部分
<!-- END FIGURE COMPONENT -->

添加恢復功能

<!-- InsertUpdateDelete12-TP4.zip -->

現在,將恢復功能添加到頁面中。使用此功能,用戶可以放棄其編輯的內容,恢復為以前保存的數據。請注意,恢復功能并不能恢復已保存或已刪除的行;因為 "Save Changes" 和 "Delete" 按鈕會將更改提交到數據庫中。


添加 "Revert Changes" 按鈕
  1. 在可視設計器中,將一個“按鈕”組件從組件面板拖動到 Page1 上。將新的按鈕放在 "Add Trip" 按鈕的右側。
  2. 將按鈕的 text 屬性更改為 Revert Changes
  3. 在“屬性”窗口中,將“按鈕”組件的 id 屬性更改為 revert
  4. 雙擊 "Revert Changes" 按鈕,將打開 Java 編輯器,且插入點會位于 revert_action() 方法中。
  5. 將下面代碼樣例中以粗體顯示的代碼添加到 revert_action() 方法中。

    <!-- BEGIN CODE SAMPLE COMPONENT -->
    代碼樣例 6:恢復操作的代碼
                     public String revert_action() {
            
                    
                      form1.discardSubmittedValues("save");
            try {
                tripDataProvider.refresh();
    
            } catch (Exception ex) {
                log("Error Description", ex);
                error(ex.getMessage());
            }
                    
                    
             return null;
        }
    	
                  

配置虛擬表單

如果應用程序使用目前的配置,則會出現一些不理想的行為。例如,如果用戶在現有行的第一列中輸入一個無效日期,然后單擊 "Add" 按鈕,操作將會失敗。由于日期轉換錯誤拒絕提交表單,因此不會將任何新行添加到表中。理想的行為是先處理表中的輸入字段,以便在忽略現有行的暫掛內容的情況下添加新行。

同樣,當用戶單擊 "Delete" 按鈕刪除行時,不論對該行或其他現有行進行了哪些編輯,都應該刪除該行。而當用戶單擊 "Revert" 按鈕時,其目的是放棄所有編輯的內容,這又應該忽略以上情況的編輯內容。

為了確保用戶在單擊 "Add"、"Delete" 或 "Revert" 按鈕時提前對頁面上的輸入字段進行處理(包括驗證檢查),可以讓這些按鈕提交虛擬表單。在本例中,您可以讓所有三個按鈕都提交相同的虛擬表單,因為它們都需要提交一個無任何參與組件的虛擬表單。
  1. 在可視設計器中,選中 "Add"、"Delete" 和 "Revert" 按鈕,單擊鼠標右鍵,然后從彈出式菜單中選擇“配置虛擬表單”。

    在“配置虛擬表單”窗口中, add delete revert 應該出現在其左上角,以表示這些按鈕處于選定狀態。
  2. 在“配置虛擬表單”窗口中,單擊“新建”,將新的虛擬表單命名為 add/delete/revert ,然后將“提交”設置為“是”。單擊“確定”。

    <!-- BEGIN FIGURE COMPONENT -->
    圖 16 :為 "Add"、"Revert" 和 "Delete" 按鈕配置虛擬表單
    <!-- END FIGURE COMPONENT -->

測試應用程序 - 第 5 部分

通過單擊“運行主項目”按鈕以生成、部署和運行項目。下面的圖 17 顯示了正在運行的應用程序。

部署后,程序可執行以下功能:

  • 從下拉列表中選擇一個名字時,會顯示出此人的行程摘要。
  • 編輯現有的行程信息,并將更改保存到數據庫中。
  • 在表中添加行,填寫行程字段,并將更改保存到數據庫中。
  • 從表中(同時從數據庫中)刪除行。
  • 放棄編輯內容,并恢復為數據庫中最近保存的數據。

<!-- BEGIN FIGURE COMPONENT -->
圖 17 :測試應用程序,第 5 部分
<!-- END FIGURE COMPONENT -->

小結

在本教程中,您將表組件、文本字段組件和下拉列表組件與數據庫中的信息進行了關聯;此外,為組件設置了屬性,添加了 prerender 和事件代碼,從而可以插入、更新和刪除數據庫中的數據并恢復所做的更改。您還使用了虛擬表單,這使得應用程序使用一個頁面即可,并且提交數據時繞過了有效性檢查。

FROM:http://www.netbeans.org/kb/55/vwp-inserts_updates_deletes_zh_CN.html

利用NetBeans的Visual Web Pack用拖拉方式建立操作數據庫的示例


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 夜间福利在线观看 | 97影院97伦里片 | 久久久噜噜噜久久网 | 亚洲视频在线网 | 国产精品不卡 | 四虎影院入口 | 思思久久99热这里只有精品66 | 国产欧美日韩精品一区二区三区 | 在线手机福利免费福利院 | 日本久久中文字幕精品 | 国内外一级毛片 | 亚洲精品aⅴ一区二区三区 亚洲精品ccc | 99精品国内不卡在线观看 | 一级毛片特级毛片黄毛片 | 俄罗斯一级毛片免费视频 | 91视频福利 | 国产综合91 | 亚洲最大色网站 | 久草久草在线 | 欧美日韩大尺码免费专区 | 欧美精品日本一级特黄 | 国产深夜福利19禁在线播放 | 久久777国产线看观看精品卜 | 日本中文字幕一区二区 | 四虎影视在线影院4hu | 亚洲欧洲一二三区机械有限公司 | 免费一级毛片在线观看 | 欧美成人se01短视频在线看 | 欧美一区二区三区高清视频 | 国产一区二区三区在线视频 | 亚洲va欧美va国产va天堂影 | 久久96精品国产 | 嘿咻视频在线观看 | 香蕉亚洲欧洲在线一区 | 狠狠色噜噜狠狠狠狠网站视频 | 亚洲日本va中文字幕在线不卡 | 亚洲综合插 | 久操精品视频 | 美女久久精品 | 亚洲不卡在线视频 | 久久精品69|