亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JBuilder2005 Struts深度體驗之新增

2019-11-18 12:54:28
字體:
來源:轉載
供稿:網友

  新增一個Struts配置文件
  
  考慮到圖書模塊是一個比較獨立的模塊,為了避免對Struts配置文件的資源爭用導致團隊工程的覆蓋或沖突,我們為這個模塊單獨提供一個新的Struts配置文件,用這個配置文件配置圖書模塊所有Struts關聯的信息。
  
  我們按照如下的方式為webModule模塊添加一個名為book-struts-config.xml的配置文件。
  
  首先到<工程目錄>/webModule/WEB-INF拷貝一個原有的struts-config.xml文件,更名為book-struts-config.xml放在struts-config.xml相同的目錄下,刪除原有配置的內容,將其調整成:
  
 ?。?xml version="1.0" encoding="UTF-8"?>
 ?。?DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
  <struts-config>
 ?。?struts-config>
  
  然后,在工程窗格的資源樹中定位到webModule->Deployment descriptors-><Struts 1.1>節點上,右擊<Struts 1.1>節點,在彈出的菜單中選擇PRoperties...彈出Properties for ’<Struts 1.1>’對話框,如圖 16所示:
   JBuilder2005 Struts深度體驗之新增(圖一)
  圖 16 Struts配置文件維護對話框
  
  點擊Add...按鈕,在彈出的Choose Struts config file對話框中選擇book-struts-config.xml配置文件,按OK這個新的Struts配置文件將添加到Struts config file in web.xml列表中。
  
  新增配置文件成功后,在工程窗格資源樹的<Struts 1.1>節點下,你將會發現這個新加入的Struts配置文件,如下圖所示:
   JBuilder2005 Struts深度體驗之新增(圖二)
  圖 17 兩個Struts配置文件
  
  這樣,在創建新的FormBean或Action時,你就可以選擇用哪個配置文件來保存Struts的配置信息了。
  
  圖書Action Form
  
  下面我們著手創建用于接收新增圖書頁面表單數據的BookActionForm,使用book-struts-config.xml保存BookActionForm的配置信息。BookActionForm需要進行數據有效性自檢,也就是說,要讓BookActionForm實現validate()方法。
  
  創建BookActionForm和創建UserActionForm相似,但是在向導的第1步需要指定book-struts-config.xml記錄BookActionForm配置信息,如圖 18所示:
   JBuilder2005 Struts深度體驗之新增(圖三)
  圖 18 選擇不同的配置文件
  
  我們在前一節為Web模塊添加了一個配置文件,在Struts config下拉框中列出了Web模塊所有配置文件,這里我們選擇WEB-INF/book-struts-config.xml。
  
  在向導的第2步,我們為BookActionForm定義下列5個屬性:
  
  String bookId;//圖書ID,對應T_BOOK表的BOOK_ID,是主鍵。
  String isbn;//isbn
  String createDate;//創建日期
  String bookName;//書名
  String author;//作者
  
  在向導的第2步直接按Finish創建BookActionForm。由于bookId屬性是主鍵,所以不能和T_BOOK中已有的記錄重復,這可以通過BookActionForm的數據自檢機制來完成,數據自檢是通過定義validate()方法來實現的。向導已經為BookActionForm生成了validate()方法框架,我們只需要在validate()方法編寫bookId的校驗的代碼就可以了,BookActionForm的最終代碼如代碼清單 10所示:
  
  代碼清單 10 BookActionForm.java
  
  1. package bookstore;
  2.
  3. import javax.servlet.http.HttpServletRequest;
  4. import org.apache.struts.action.*;
  5. import java.sql.*;
  6.
  7. public class BookActionForm
  8.  extends ActionForm {
  9.   …
  10.   public ActionErrors validate(ActionMapping actionMapping,
  11.   HttpServletRequest httpServletRequest) {
  12.    ActionErrors errors = new ActionErrors();
  13.    Connection conn = null;
  14.    try {
  15.     conn = DBConnection.getConnection();
  16.     PreparedStatement pStat = conn.prepareStatement(
  17.      "select count(*) count from T_BOOK where BOOK_ID=?");
  18.     pStat.setString(1, this.bookId);
  19.     ResultSet rs = pStat.executeQuery();
  20.     if (rs.next()&& rs.getInt(1) > 0) {
  21.      errors.add("bookId ",
  22.      new ActionMessage("bookstore.duplicate.bookId",
  23.      "圖書ID和數據庫中已經有的ID重復"));
  24.     }
  25.    }
  26.    catch (SQLException se) {
  27.     se.printStackTrace();
  28.     errors.add("bookId",
  29.     new ActionMessage("bookstore.dbaccess.error", "訪問數據庫時出錯"));
  30.    }
  31.    finally {
  32.     try {
  33.      if (conn != null) {
  34.       conn.close();
  35.      }
  36.     }
  37.     catch (SQLException ex) {
  38.      ex.printStackTrace();
  39.      errors.add("bookId",
  40.      new ActionMessage("bookstore.dbaccess.error",
  41.        "訪問數據庫時出錯"));
  42.     }
  43.    }
  44.   return errors;
  45.  }
  46.
  47.  public void reset(ActionMapping actionMapping,
  48.   HttpServletRequest servletRequest) {
  49.    this.createDate = getCurrDateStr();
  50.   }
  51.
  52.  //獲取當前時間字符
  53.  private static String getCurrDateStr() {
  54.   SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  55.   return sdf.format(new Date());
  56.  }
  57. }
  
  當用戶提交表單后,Struts框架自動把表單數據填充到ActionForm中,接著Struts框架自動調用ActionForm的validate()方法進行數據驗證。假如validate()方法返回的ActionErrors為null或不包含任何ActionMessage對象,表示通過驗證,Struts框架將ActionForm和HTTP請求一起傳給Action的execute(),否則Struts框架將HTTP請求返回到輸入的頁面中,而輸入頁面即可通過<Html:errors>顯示對應request域中的ActionErrors錯誤信息顯示出來。
  
  此外,我們在reset()方法中將createDate屬性置為當前的日期,因為這個屬性值不是通過頁面表單提供的。
  
  新增圖書jsp頁面
  
  1.通過向導創建bookAdd.jsp
  
  通過JSP向導創建bookAdd.jsp頁面,在向導的第2步選擇使用Struts1.1的struts-bean和struts-html標簽,如圖 19所示:
   JBuilder2005 Struts深度體驗之新增(圖四)
  圖 19 指定選用Struts標簽
  
  2.使用JBuilder的Struts標簽構建JSP頁面
  
  你可以直接用拖拽的方法從JBuilder編輯器左邊的標簽庫將Struts標簽添加到JSP頁面中,如圖 20所示:
   JBuilder2005 Struts深度體驗之新增(圖五)
  圖 20 用拖拽的方式添加Struts標簽
  
  Struts的html標簽可以完成和標準的HTML元素相同的功能,Struts提倡使用Struts html標簽庫,因為這些標簽可以和Struts框架的其他組件緊密地聯系起來。而Strtus的bean標簽庫可以訪問已經存在的JavaBean及其屬性,有一些bean標簽還可以訪問HTTP請求頭信息及Web資源文件的信息。
  
  我們希望用Struts的html標簽庫創建添加圖書的表單,通過bean標簽庫訪問Web資源文件作為表單組件前的標識文字。
  
  bookAdd.jsp的最終代碼如代碼清單 11所示:
  
  代碼清單 11 bookAdd.jsp
  
  1. <%@page contentType="text/html; charset=GBK" %>
  2. <%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
  3. <%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
  4. <html>
  5. <head>
  6. <title>bookInsert</title>
  7. <script language="Javascript" >
  8. function mySubmit(form)
  9. {
  10. if(form.isbn.value == null form.isbn.value == "")
  11. {
  12.  alert("圖書的ISBN不答應為空");
  13.  return false;
  14. }
  15. if(form.bookName.value == null form.bookName.value == "")
  16. {
  17.  alert("圖書名不答應為空");
  18.  return false;
  19. }
  20. }
  21. </script>
  22. </head>
  23. <body bgcolor="#ffffff">
  24. <html:errors/>
  25.  <html:form action="/bookInsertAction.do" focus="bookId" method="post"
  26.   onsubmit="return mySubmit(this)" >
  27. ?。紅able width="100%%" border="0">
  28.   <tr>
  29.   ?。紅d>
  30.     <bean:message bundle="bookstore" key="bookstore.bookId"/>
  31.    </td>
  32.   ?。紅d>
  33.    ?。糷tml:text name="bookActionForm" property="bookId"/>
  3

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久伊人| 亚洲国产精品一区二区三区| 亚洲成人aaa| 国产精品v日韩精品| 欧美大肥婆大肥bbbbb| 亚洲第一免费网站| xxav国产精品美女主播| 国外成人免费在线播放| 在线性视频日韩欧美| 日韩中文字幕网| 亚洲欧美变态国产另类| 日韩亚洲欧美中文在线| 色综合男人天堂| 亚洲999一在线观看www| 国内精品久久影院| 日韩最新av在线| 久久天天躁狠狠躁老女人| 韩国一区二区电影| 伊人久久免费视频| 欧美丰满少妇xxxx| 97国产suv精品一区二区62| 欧美视频国产精品| 成人观看高清在线观看免费| 欧美激情一区二区久久久| 久久久女人电视剧免费播放下载| 久久久久久久爱| 久久99热精品这里久久精品| 日韩av三级在线观看| 日韩在线中文字幕| 日韩毛片在线观看| 国产精品白嫩初高中害羞小美女| 亚洲精美色品网站| 欧美一级大片在线免费观看| 国产精品久久久精品| 欧美xxxx做受欧美| 国产一区二区三区在线免费观看| 久久精品一本久久99精品| 日韩欧美成人免费视频| 亚洲最新在线视频| 精品久久久中文| 日韩久久精品成人| 国产精品一区久久久| 欧美性xxxx极品高清hd直播| 亚洲欧洲日产国码av系列天堂| 亚洲白拍色综合图区| 久久久精品久久久| 欧美激情第6页| 欧美日韩免费在线| www.午夜精品| 国产精品亚洲一区二区三区| 久久精品成人一区二区三区| 精品国产一区二区三区久久狼黑人| 成人国产精品久久久久久亚洲| 92国产精品久久久久首页| 久久精品国亚洲| 欧美亚洲在线播放| 欧美激情视频网站| 91精品综合久久久久久五月天| 久久久久久综合网天天| 欧美丰满片xxx777| 亚洲第一男人av| 欧美极品美女视频网站在线观看免费| 亚洲3p在线观看| 精品一区二区三区电影| 久久成年人免费电影| 97香蕉久久超级碰碰高清版| 国产精品日韩久久久久| 国外成人性视频| 26uuu另类亚洲欧美日本老年| 久久久久久久999| 日本精品免费观看| 欧美精品在线免费| 国产精品a久久久久久| 国产啪精品视频网站| 亚洲精品永久免费精品| 最近2019免费中文字幕视频三| 国产精品视频99| 国产中文欧美精品| 日韩欧美成人免费视频| 日韩激情av在线免费观看| 欧美亚洲国产成人精品| 亚洲国产精品va在线看黑人| 国产精品都在这里| 国产精品久久久久久av下载红粉| 久久91亚洲精品中文字幕| 91精品国产综合久久香蕉最新版| 亚洲免费一级电影| 国产日韩在线免费| 国产91在线高潮白浆在线观看| 欧美日韩不卡合集视频| 欧美日韩加勒比精品一区| 国产精品久久99久久| 亚洲成人网av| www亚洲精品| 国产黑人绿帽在线第一区| 欧美日韩黄色大片| 亚洲国产精品va在线| 美女精品久久久| 亚洲国产精品久久精品怡红院| 日本久久久久久| 日韩av免费网站| 欧美巨猛xxxx猛交黑人97人| 国产精品久久久久久av下载红粉| 日韩免费电影在线观看| 美女国内精品自产拍在线播放| 日韩亚洲精品视频| 精品国产一区二区三区四区在线观看| 国产成人精品一区二区| 久久精品成人欧美大片| 日韩欧美第一页| 亚洲免费一级电影| 亚洲欧洲国产精品| 精品久久香蕉国产线看观看亚洲| 91久久精品视频| 国产98色在线| 久久999免费视频| 91在线观看欧美日韩| 亚洲电影在线看| 97久久精品视频| 日韩av在线播放资源| 欧美肥婆姓交大片| 伊人伊人伊人久久| 国产美女久久精品香蕉69| 国产一区红桃视频| 国产精品精品久久久| 欧美主播福利视频| 国产成人精品久久久| 久久久久久亚洲| 久久伊人精品天天| 精品自拍视频在线观看| 日韩在线免费高清视频| 91av在线视频观看| 国产亚洲欧美一区| 欧美日韩一区二区三区在线免费观看| 国模吧一区二区三区| 欧美专区日韩视频| 91久久嫩草影院一区二区| 国产香蕉精品视频一区二区三区| 一本色道久久综合亚洲精品小说| 欧美日韩国产精品一区| 欧美另类高清videos| 日韩不卡中文字幕| 国产精品av网站| 亚洲综合成人婷婷小说| xxxxxxxxx欧美| 亚洲久久久久久久久久| 国产精品美女呻吟| 国产精品一区二区三| 国产在线观看一区二区三区| 永久免费毛片在线播放不卡| 欧美性高潮在线| 国产精品久久不能| 最近2019年中文视频免费在线观看| 亚洲大胆人体av| 久久综合88中文色鬼| 成人网址在线观看| 国产精品成av人在线视午夜片| 国产精品美女www爽爽爽视频| 亚洲视屏在线播放| 欧美午夜精品久久久久久浪潮| 色婷婷亚洲mv天堂mv在影片| 最近2019年手机中文字幕| 性欧美亚洲xxxx乳在线观看| 国外成人在线视频|