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

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

系統(tǒng) 2069 0

執(zhí)行插入、更新和刪除操作

<!-- 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 月 [修訂號(hào):V1-1]
<!-- END VCD4 BYLINE AND TOOLS --><!-- BEGIN VCD1 OVERVIEW COMPONENT -->

本教程介紹了如何使用 NetBeans Visual Web Pack 5.5 構(gòu)建一個(gè)可以創(chuàng)建、檢索、更新和刪除數(shù)據(jù)庫行的 Web 應(yīng)用程序。該應(yīng)用程序提供一個(gè)主數(shù)據(jù)的下拉列表以及一個(gè)同步的詳細(xì)信息表。該應(yīng)用程序的用戶可以在詳細(xì)信息表及其關(guān)聯(lián)數(shù)據(jù)庫中添加、更新和刪除記錄。

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

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

目錄

- 創(chuàng)建項(xiàng)目
- 添加插入功能
- 修改頁面以保存行集
- 添加刪除功能
- 添加恢復(fù)功能
- 小結(jié)
<!-- END VCD5 ANCHOR LINKS COMPONENT -->

本教程將使用以下資源

NetBeans Visual Web Pack 5.5 可以與所有支持的服務(wù)器以及 Java EE 1.4 和 Java EE 5 平臺(tái)配合使用。本教程向您介紹了 Visual Web Pack 的各種功能,這些功能需要利用下表中帶有復(fù)選標(biāo)記的資源。有關(guān)支持的服務(wù)器和 Java EE 平臺(tái)的詳細(xì)信息,請(qǐng)參見 NetBeans Visual Web Pack 5.5 安裝說明

應(yīng)用服務(wù)器 Sun Java System Application Server 9
Tomcat
JBoss
BEA WebLogic
JavaServer Faces 組件/
Java EE 平臺(tái)
1.2/Java EE 5*
1.1/J2EE 1.4
Travel 數(shù)據(jù)庫 必需
BluePrints AJAX 組件庫 不是必需的

* 該教程發(fā)布時(shí),只有 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 -->

創(chuàng)建項(xiàng)目

在本教程中,將創(chuàng)建包含一個(gè)頁面的 Web 應(yīng)用程序。您可以先從設(shè)計(jì)頁面布局入手,該頁面包含一個(gè)人名及其相應(yīng)的行程,如下圖所示。

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

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

配置下拉列表
  1. 打開“運(yùn)行環(huán)境”窗口,展開“數(shù)據(jù)庫”節(jié)點(diǎn)并檢查是否已連接 TRAVEL 數(shù)據(jù)庫。

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

    注意: 在本教程的其余部分中,將 TRAVEL 數(shù)據(jù)庫的 jdbc 節(jié)點(diǎn)稱為 "Travel" 節(jié)點(diǎn)。
  3. 將 "PERSON" 節(jié)點(diǎn)拖動(dòng)到可視設(shè)計(jì)器的下拉列表上。

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

    此設(shè)置使得每當(dāng)您從列表中選擇新值時(shí),則會(huì)將該頁面發(fā)送到服務(wù)器。
  5. 右鍵單擊下拉列表,然后從彈出式菜單中選擇“配置虛擬表單”。

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

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

    通過查看虛擬表單,您可以看到可視設(shè)計(jì)器中的組件與您已經(jīng)配置的任何虛擬表單之間的關(guān)系。

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

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

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

    圖 4 :將表綁定到數(shù)據(jù)提供器
    <!-- END FIGURE COMPONENT -->
  4. 單擊“選項(xiàng)”標(biāo)簽,并將標(biāo)題更改為 Trips Summary
  5. 單擊“確定”。

    現(xiàn)在,可視設(shè)計(jì)器中的“表”組件應(yīng)如下圖所示。請(qǐng)注意,如果未按下圖順序顯示各列,可通過重新打開“表布局”對(duì)話框,單擊“列”標(biāo)簽并使用“上移”和“下移”按鈕重新對(duì)其進(jìn)行排列。

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

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

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

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

更改列組件

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

    將打開“表布局”對(duì)話框。
  2. 在“列”標(biāo)簽中,從右側(cè)的“選定”列表中選擇 "TRIP.DEPDATE"。在對(duì)話框底部的“列詳細(xì)信息”區(qū)域中,將“組件類型”從“靜態(tài)文本”更改為“文本字段”,如下圖所示。

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

    注意: 如果執(zhí)行上述步驟后表列太寬,則可以通過選擇每列中的第一個(gè)組件并拖動(dòng)其選擇句柄來調(diào)整列的大小。
  6. 將 "Travel" >“表”> "TRIPTYPE" 節(jié)點(diǎn)拖動(dòng)到“表”組件中的下拉列表上。

    此操作將創(chuàng)建 triptypeDataProvider
<!-- InsertUpdateDelete12-preEventInit.zip -->

為表配置虛擬表單

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

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

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

現(xiàn)在,將 personDD 下拉列表與“表”組件相關(guān)聯(lián)以實(shí)現(xiàn)以下行為:當(dāng)用戶從列表中選擇某人時(shí),表中則會(huì)顯示出此人的行程。
  1. 雙擊 personDD 下拉列表以創(chuàng)建值更改事件方法(將打開 Java 編輯器,并且插入點(diǎn)將位于該方法內(nèi))。
  2. 在值更改事件方法中,找到注釋行 // 待做事項(xiàng):替換為您的代碼 。使用代碼樣例 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 子句結(jié)尾處的 form1.discardSubmittedValues("save") 語句可確保每當(dāng)用戶從下拉列表中選擇新的人員時(shí),將使用新的所選人員的相關(guān)信息替換當(dāng)前行程信息。請(qǐng)您回想一下,顯示行程信息的用戶界面元素都參與了名為 save 的虛擬表單。請(qǐng)注意,事件處理程序并不拋出異常,而是在 server.log 文件中記錄異常。事件處理程序還將調(diào)用 error 方法,當(dāng)出現(xiàn)錯(cuò)誤時(shí)就會(huì)將消息顯示在“消息組”組件中。
  3. 在 Java 源代碼中滾動(dòng)至 prerender() 方法(或者,如果愿意,請(qǐng)按 Ctrl-F 組合鍵以打開“查找”對(duì)話框并搜索 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 編輯器中單擊鼠標(biāo)右鍵,然后選擇“重新設(shè)置代碼格式”以便對(duì)代碼進(jìn)行適當(dāng)?shù)呐帕小?

測(cè)試應(yīng)用程序 - 第 1 部分

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

<!-- BEGIN FIGURE COMPONENT -->
圖 10 :部署的應(yīng)用程序,測(cè)試 1
<!-- END FIGURE COMPONENT -->

添加插入功能

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

    <!-- BEGIN FIGURE COMPONENT -->
    圖 11 :將“消息”組件與文本字段關(guān)聯(lián)
    <!-- END FIGURE COMPONENT -->
  6. 在組件面板的“基本”類別中,將一個(gè)“按鈕”組件拖動(dòng)到 Page1 上,并將它放置在“表”組件上方靠近第二列的頂部,如圖 12 所示。
  7. 將其 text 屬性由“ 按鈕 ”更改為 " Add Trip "。
  8. 在“屬性”窗口中,將按鈕的 id 屬性更改為 add
  9. 在可視設(shè)計(jì)器中,雙擊該按鈕以打開 Java 編輯器,插入點(diǎn)將位于該按鈕的事件處理程序中。
  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 編輯器中單擊鼠標(biāo)右鍵,然后選擇“修復(fù)導(dǎo)入”以解決“找不到 RowKey ”的錯(cuò)誤。

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

    import com.sun.data.provider.RowKey;

測(cè)試應(yīng)用程序 - 第 2 部分

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

<!-- BEGIN FIGURE COMPONENT -->
圖 12 :部署的應(yīng)用程序,測(cè)試 2
<!-- END FIGURE COMPONENT -->

修改頁面以保存行集

在此部分,您將在項(xiàng)目中添加第二個(gè)行集。該行集用于計(jì)算已使用的最大行程 ID。
  1. 在編輯器窗口中單擊 "Design" 以返回到可視設(shè)計(jì)器中的 Page1。
  2. 從“運(yùn)行環(huán)境”窗口中選擇“數(shù)據(jù)庫”> "Travel" >“表”> "TRIP" 表,然后將它拖動(dòng)到“概要”窗口中的 "SessionBean1" 節(jié)點(diǎn)上。

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

    注意: 行集在對(duì)話框中出現(xiàn)了兩次。這是一個(gè)已知問題,請(qǐng)予以忽略。它不會(huì)影響本教程中的應(yīng)用程序。

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

將用戶更改的內(nèi)容保存在數(shù)據(jù)庫中
  1. 將一個(gè)“按鈕”組件放在表的第一列上方。
  2. 將按鈕的 text 屬性由“按鈕” 更改為 " Save Changes "。
  3. 在“屬性”窗口中,將其 id 屬性更改為 save
  4. 右鍵單擊 "Save Changes" 按鈕,然后從彈出式菜單中選擇“配置虛擬表單”。
  5. 在“配置虛擬表單”對(duì)話框中,確保左上角的列表中顯示的是 save ,以便此窗口中的更改可以應(yīng)用于 "Save Changes" 按鈕。然后,選擇 save 虛擬表單,將“提交”值更改為“是”并單擊“確定”。
  6. 在可視設(shè)計(jì)器中,雙擊 "Save Changes" 按鈕以打開 Java 編輯器。在 Java 編輯器中,插入點(diǎn)將位于該按鈕的事件處理程序中。
  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 -->

測(cè)試應(yīng)用程序 - 第 3 部分

通過單擊“運(yùn)行主項(xiàng)目”按鈕以生成、部署和運(yùn)行項(xiàng)目。應(yīng)用程序?qū)⒖梢詫?shí)現(xiàn)以下功能:

  • 可以添加行程并進(jìn)行保存。行程將會(huì)顯示在表中,并且在選擇其他人員后重新返回時(shí),該行程仍然存在。
  • 可以編輯現(xiàn)有的行程信息,并保存所做的更改。
  • 如果在 "Date" 字段中輸入除日期之外的內(nèi)容,則應(yīng)用程序?qū)⑻峁┮粭l錯(cuò)誤消息。
  • 在保存之前可以多處單擊 "Add Trip",這是一次添加多行的簡便方法。
  • 如果在保存之前切換到其他人員,則會(huì)丟失所有更新(包括在所添加的行上正在填寫的信息)。
  • 如果修改了某些值,然后單擊某個(gè)列標(biāo)題(使之按該列進(jìn)行排序),則表組件會(huì)記住這些暫掛的更改,并在隨后可以保存這些更改。

添加刪除功能

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

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


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

    將打開“表布局”對(duì)話框。
  2. 單擊“列”標(biāo)簽,然后單擊“新建”,將一個(gè)新列添加到表中。
  3. 在“選定”列表中選擇新列的名稱后,在“列詳細(xì)信息”區(qū)域中進(jìn)行如下更改:

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

添加事件代碼
  1. 雙擊 "Delete" 列中的第一個(gè)按鈕,將打開 Java 編輯器,且插入點(diǎn)位于 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 -->

測(cè)試應(yīng)用程序 - 第 4 部分

通過單擊“運(yùn)行主項(xiàng)目”按鈕以生成、部署和運(yùn)行項(xiàng)目。下圖顯示了運(yùn)行的應(yīng)用程序。

部署后,您應(yīng)該可以從表中刪除行,進(jìn)而將其從數(shù)據(jù)庫中刪除。刪除操作還會(huì)將所有暫掛的更改提交到數(shù)據(jù)庫中。

<!-- BEGIN FIGURE COMPONENT -->
圖 15 :測(cè)試應(yīng)用程序,第 4 部分
<!-- END FIGURE COMPONENT -->

添加恢復(fù)功能

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

現(xiàn)在,將恢復(fù)功能添加到頁面中。使用此功能,用戶可以放棄其編輯的內(nèi)容,恢復(fù)為以前保存的數(shù)據(jù)。請(qǐng)注意,恢復(fù)功能并不能恢復(fù)已保存或已刪除的行;因?yàn)?"Save Changes" 和 "Delete" 按鈕會(huì)將更改提交到數(shù)據(jù)庫中。


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

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

配置虛擬表單

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

同樣,當(dāng)用戶單擊 "Delete" 按鈕刪除行時(shí),不論對(duì)該行或其他現(xiàn)有行進(jìn)行了哪些編輯,都應(yīng)該刪除該行。而當(dāng)用戶單擊 "Revert" 按鈕時(shí),其目的是放棄所有編輯的內(nèi)容,這又應(yīng)該忽略以上情況的編輯內(nèi)容。

為了確保用戶在單擊 "Add"、"Delete" 或 "Revert" 按鈕時(shí)提前對(duì)頁面上的輸入字段進(jìn)行處理(包括驗(yàn)證檢查),可以讓這些按鈕提交虛擬表單。在本例中,您可以讓所有三個(gè)按鈕都提交相同的虛擬表單,因?yàn)樗鼈兌夹枰峤灰粋€(gè)無任何參與組件的虛擬表單。
  1. 在可視設(shè)計(jì)器中,選中 "Add"、"Delete" 和 "Revert" 按鈕,單擊鼠標(biāo)右鍵,然后從彈出式菜單中選擇“配置虛擬表單”。

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

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

測(cè)試應(yīng)用程序 - 第 5 部分

通過單擊“運(yùn)行主項(xiàng)目”按鈕以生成、部署和運(yùn)行項(xiàng)目。下面的圖 17 顯示了正在運(yùn)行的應(yīng)用程序。

部署后,程序可執(zhí)行以下功能:

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

<!-- BEGIN FIGURE COMPONENT -->
圖 17 :測(cè)試應(yīng)用程序,第 5 部分
<!-- END FIGURE COMPONENT -->

小結(jié)

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

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产成人综合精品一区 | 另类图片综合网 | 九九99在线视频 | 欧美精品免费看 | 爱爱小视频成人免费 | 亚洲综合国产精品 | 日本久久中文字幕 | 欧美成人精品一区二区三区 | 亚洲在线视频播放 | 日本精品久久久久中文字幕 | 日韩精品免费一区二区三区 | 777奇米影视网 | 80s成年女人毛片免费观看观看 | 日日摸夜夜摸无需播放器 | 99久久国产综合精品成人影院 | 国产成人一区二区三区视频免费 | 免费国产视频 | 亚洲精品欧美精品日韩精品 | 国产在线播放91 | 国产精品免费一区二区三区四区 | 亚洲一区二区三区免费在线观看 | 久久精品国产只有精品2020 | 麻豆亚洲一区 | 97视频在线观看视频最新 | 91精品成人免费国产片 | 色视频在线免费看 | 日本不卡免费在线 | 一本色道久久综合亚洲精品 | 欧美成人毛片在线视频 | 国产成人在线播放 | 日韩亚洲成a人片在线观看 日韩亚洲第一页 | 国产主播福利在线 | 国产精品久久久久a影院 | 日本黄色网址免费 | 国产成人教育视频在线观看 | swag国产精品一区二区 | 国产亚洲午夜精品 | 久久精品国产精品2020 | 亚洲免费一区 | 欧美成人aⅴ | 国产亚洲午夜精品a一区二区 |