欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 2142 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ù)庫(kù)行的 Web 應(yīng)用程序。該應(yīng)用程序提供一個(gè)主數(shù)據(jù)的下拉列表以及一個(gè)同步的詳細(xì)信息表。該應(yīng)用程序的用戶(hù)可以在詳細(xì)信息表及其關(guān)聯(lián)數(shù)據(jù)庫(kù)中添加、更新和刪除記錄。

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

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

目錄

- 創(chuàng)建項(xiàng)目
- 添加插入功能
- 修改頁(yè)面以保存行集
- 添加刪除功能
- 添加恢復(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)參見(jiàn) NetBeans Visual Web Pack 5.5 安裝說(shuō)明

應(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ù)庫(kù) 必需
BluePrints AJAX 組件庫(kù) 不是必需的

* 該教程發(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è)頁(yè)面的 Web 應(yīng)用程序。您可以先從設(shè)計(jì)頁(yè)面布局入手,該頁(yè)面包含一個(gè)人名及其相應(yīng)的行程,如下圖所示。

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

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

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

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

    注意: 在本教程的其余部分中,將 TRAVEL 數(shù)據(jù)庫(kù)的 jdbc 節(jié)點(diǎn)稱(chēng)為 "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ì)將該頁(yè)面發(fā)送到服務(wù)器。
  5. 右鍵單擊下拉列表,然后從彈出式菜單中選擇“配置虛擬表單”。

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

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

    通過(guò)查看虛擬表單,您可以看到可視設(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ì)話(huà)框顯示了您剛創(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)注意,如果未按下圖順序顯示各列,可通過(guò)重新打開(kāi)“表布局”對(duì)話(huà)框,單擊“列”標(biāo)簽并使用“上移”和“下移”按鈕重新對(duì)其進(jìn)行排列。

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

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

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

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

更改列組件

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

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

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

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

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

為表配置虛擬表單

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

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

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

現(xiàn)在,將 personDD 下拉列表與“表”組件相關(guān)聯(lián)以實(shí)現(xiàn)以下行為:當(dāng)用戶(hù)從列表中選擇某人時(shí),表中則會(huì)顯示出此人的行程。
  1. 雙擊 personDD 下拉列表以創(chuàng)建值更改事件方法(將打開(kāi) 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") 語(yǔ)句可確保每當(dāng)用戶(hù)從下拉列表中選擇新的人員時(shí),將使用新的所選人員的相關(guān)信息替換當(dāng)前行程信息。請(qǐng)您回想一下,顯示行程信息的用戶(hù)界面元素都參與了名為 save 的虛擬表單。請(qǐng)注意,事件處理程序并不拋出異常,而是在 server.log 文件中記錄異常。事件處理程序還將調(diào)用 error 方法,當(dāng)出現(xiàn)錯(cuò)誤時(shí)就會(huì)將消息顯示在“消息組”組件中。
  3. 在 Java 源代碼中滾動(dòng)至 prerender() 方法(或者,如果愿意,請(qǐng)按 Ctrl-F 組合鍵以打開(kāi)“查找”對(duì)話(huà)框并搜索 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)此頁(yè)面時(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 -->在此部分中,通過(guò)在數(shù)據(jù)庫(kù)中插入行集,實(shí)現(xiàn)將行程添加到表中的功能。首先,為表的文本字段提供“消息”組件。這些功能可以確保當(dāng)輸入不正確的信息時(shí),用戶(hù)能夠看到錯(cuò)誤消息。然后,在頁(yè)面中添加一個(gè)按鈕,以便用戶(hù)可以通過(guò)它將新行添加到數(shù)據(jù)緩沖區(qū)中。
  1. 在可視設(shè)計(jì)器中查看 Page1。
  2. 在組件面板的“基本”類(lèi)別中,將“消息”組件分別拖動(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. 在組件面板的“基本”類(lèi)別中,將一個(gè)“按鈕”組件拖動(dòng)到 Page1 上,并將它放置在“表”組件上方靠近第二列的頂部,如圖 12 所示。
  7. 將其 text 屬性由“ 按鈕 ”更改為 " Add Trip "。
  8. 在“屬性”窗口中,將按鈕的 id 屬性更改為 add 。
  9. 在可視設(shè)計(jì)器中,雙擊該按鈕以打開(kāi) 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 語(yǔ)句塊中添加下列包:

    import com.sun.data.provider.RowKey;

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

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

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

修改頁(yè)面以保存行集

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

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

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

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

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

通過(guò)單擊“運(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",這是一次添加多行的簡(jiǎn)便方法。
  • 如果在保存之前切換到其他人員,則會(huì)丟失所有更新(包括在所添加的行上正在填寫(xiě)的信息)。
  • 如果修改了某些值,然后單擊某個(gè)列標(biāo)題(使之按該列進(jìn)行排序),則表組件會(huì)記住這些暫掛的更改,并在隨后可以保存這些更改。

添加刪除功能

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

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


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

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

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

添加事件代碼
  1. 雙擊 "Delete" 列中的第一個(gè)按鈕,將打開(kāi) 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 部分

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

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

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

添加恢復(fù)功能

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

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


添加 "Revert Changes" 按鈕
  1. 在可視設(shè)計(jì)器中,將一個(gè)“按鈕”組件從組件面板拖動(dòng)到 Page1 上。將新的按鈕放在 "Add Trip" 按鈕的右側(cè)。
  2. 將按鈕的 text 屬性更改為 Revert Changes
  3. 在“屬性”窗口中,將“按鈕”組件的 id 屬性更改為 revert
  4. 雙擊 "Revert Changes" 按鈕,將打開(kāi) 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)一些不理想的行為。例如,如果用戶(hù)在現(xiàn)有行的第一列中輸入一個(gè)無(wú)效日期,然后單擊 "Add" 按鈕,操作將會(huì)失敗。由于日期轉(zhuǎn)換錯(cuò)誤拒絕提交表單,因此不會(huì)將任何新行添加到表中。理想的行為是先處理表中的輸入字段,以便在忽略現(xiàn)有行的暫掛內(nèi)容的情況下添加新行。

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

為了確保用戶(hù)在單擊 "Add"、"Delete" 或 "Revert" 按鈕時(shí)提前對(duì)頁(yè)面上的輸入字段進(jìn)行處理(包括驗(yàn)證檢查),可以讓這些按鈕提交虛擬表單。在本例中,您可以讓所有三個(gè)按鈕都提交相同的虛擬表單,因?yàn)樗鼈兌夹枰峤灰粋€(gè)無(wú)任何參與組件的虛擬表單。
  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 部分

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

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

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

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

小結(jié)

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

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

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

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

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 天天看片中文字幕 | 国产视频网 | 激情综合网婷婷 | 色屁屁影院www免费 特片网久久 | 日本韩国三级在线 | 亚洲综合色播 | 亚洲成人一区 | 九九国产| 久久精品男人的天堂 | 一区二区三区四区免费看 | 亚洲精品无码国产爽快A片百度 | 精品自拍视频 | 欧美激烈精交gif动态图18p | www.奇米第四色 | 精品三级国产精品经典三 | 精品久久久久久 | 精品国产一区三区 | 五月网婷婷 | 日韩中文有码高清 | 无遮挡一级毛片私人影院 | 黄页成人免费网站 | 精品国产91亚洲一区二区三区www | 爱爱视频天天干 | 色婷婷狠狠| 天天影视免费在线观看入口 | 精品粉嫩aⅴ一区二区三区四区 | 九九色综合 | 亚洲综合色一区二区三区另类 | 在线97视频| 国产九色在线 | 国产黄在线观看免费观看软件视频 | 性色网址 | 一本色道久久88综合亚洲精品高清 | 久久久婷婷一区二区三区不卡 | 懂色一区二区三区免费观看 | www.com黄色 | 久久亚洲日本不卡一区二区 | 艹逼免费视频 | 婷婷色综合久久五月亚洲 | 成年人看的羞羞网站 | 久久久国产精品福利免费 |