麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JBuilder2005 Struts深度體驗(yàn)之新增

2019-11-18 12:54:28
字體:
供稿:網(wǎng)友

  新增一個(gè)Struts配置文件
  
  考慮到圖書模塊是一個(gè)比較獨(dú)立的模塊,為了避免對(duì)Struts配置文件的資源爭(zhēng)用導(dǎo)致團(tuán)隊(duì)工程的覆蓋或沖突,我們?yōu)檫@個(gè)模塊單獨(dú)提供一個(gè)新的Struts配置文件,用這個(gè)配置文件配置圖書模塊所有Struts關(guān)聯(lián)的信息。
  
  我們按照如下的方式為webModule模塊添加一個(gè)名為book-struts-config.xml的配置文件。
  
  首先到<工程目錄>/webModule/WEB-INF拷貝一個(gè)原有的struts-config.xml文件,更名為book-struts-config.xml放在struts-config.xml相同的目錄下,刪除原有配置的內(nèi)容,將其調(diào)整成:
  
  <?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>節(jié)點(diǎn)上,右擊<Struts 1.1>節(jié)點(diǎn),在彈出的菜單中選擇PRoperties...彈出Properties for ’<Struts 1.1>’對(duì)話框,如圖 16所示:
   JBuilder2005 Struts深度體驗(yàn)之新增(圖一)
  圖 16 Struts配置文件維護(hù)對(duì)話框
  
  點(diǎn)擊Add...按鈕,在彈出的Choose Struts config file對(duì)話框中選擇book-struts-config.xml配置文件,按OK這個(gè)新的Struts配置文件將添加到Struts config file in web.xml列表中。
  
  新增配置文件成功后,在工程窗格資源樹的<Struts 1.1>節(jié)點(diǎn)下,你將會(huì)發(fā)現(xiàn)這個(gè)新加入的Struts配置文件,如下圖所示:
   JBuilder2005 Struts深度體驗(yàn)之新增(圖二)
  圖 17 兩個(gè)Struts配置文件
  
  這樣,在創(chuàng)建新的FormBean或Action時(shí),你就可以選擇用哪個(gè)配置文件來保存Struts的配置信息了。
  
  圖書Action Form
  
  下面我們著手創(chuàng)建用于接收新增圖書頁(yè)面表單數(shù)據(jù)的BookActionForm,使用book-struts-config.xml保存BookActionForm的配置信息。BookActionForm需要進(jìn)行數(shù)據(jù)有效性自檢,也就是說,要讓BookActionForm實(shí)現(xiàn)validate()方法。
  
  創(chuàng)建BookActionForm和創(chuàng)建UserActionForm相似,但是在向?qū)У牡?步需要指定book-struts-config.xml記錄BookActionForm配置信息,如圖 18所示:
   JBuilder2005 Struts深度體驗(yàn)之新增(圖三)
  圖 18 選擇不同的配置文件
  
  我們?cè)谇耙还?jié)為Web模塊添加了一個(gè)配置文件,在Struts config下拉框中列出了Web模塊所有配置文件,這里我們選擇WEB-INF/book-struts-config.xml。
  
  在向?qū)У牡?步,我們?yōu)锽ookActionForm定義下列5個(gè)屬性:
  
  String bookId;//圖書ID,對(duì)應(yīng)T_BOOK表的BOOK_ID,是主鍵。
  String isbn;//isbn
  String createDate;//創(chuàng)建日期
  String bookName;//書名
  String author;//作者
  
  在向?qū)У牡?步直接按Finish創(chuàng)建BookActionForm。由于bookId屬性是主鍵,所以不能和T_BOOK中已有的記錄重復(fù),這可以通過BookActionForm的數(shù)據(jù)自檢機(jī)制來完成,數(shù)據(jù)自檢是通過定義validate()方法來實(shí)現(xiàn)的。向?qū)б呀?jīng)為BookActionForm生成了validate()方法框架,我們只需要在validate()方法編寫bookId的校驗(yàn)的代碼就可以了,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和數(shù)據(jù)庫(kù)中已經(jīng)有的ID重復(fù)"));
  24.     }
  25.    }
  26.    catch (SQLException se) {
  27.     se.printStackTrace();
  28.     errors.add("bookId",
  29.     new ActionMessage("bookstore.dbaccess.error", "訪問數(shù)據(jù)庫(kù)時(shí)出錯(cuò)"));
  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.        "訪問數(shù)據(jù)庫(kù)時(shí)出錯(cuò)"));
  42.     }
  43.    }
  44.   return errors;
  45.  }
  46.
  47.  public void reset(ActionMapping actionMapping,
  48.   HttpServletRequest servletRequest) {
  49.    this.createDate = getCurrDateStr();
  50.   }
  51.
  52.  //獲取當(dāng)前時(shí)間字符
  53.  private static String getCurrDateStr() {
  54.   SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  55.   return sdf.format(new Date());
  56.  }
  57. }
  
  當(dāng)用戶提交表單后,Struts框架自動(dòng)把表單數(shù)據(jù)填充到ActionForm中,接著Struts框架自動(dòng)調(diào)用ActionForm的validate()方法進(jìn)行數(shù)據(jù)驗(yàn)證。假如validate()方法返回的ActionErrors為null或不包含任何ActionMessage對(duì)象,表示通過驗(yàn)證,Struts框架將ActionForm和HTTP請(qǐng)求一起傳給Action的execute(),否則Struts框架將HTTP請(qǐng)求返回到輸入的頁(yè)面中,而輸入頁(yè)面即可通過<Html:errors>顯示對(duì)應(yīng)request域中的ActionErrors錯(cuò)誤信息顯示出來。
  
  此外,我們?cè)趓eset()方法中將createDate屬性置為當(dāng)前的日期,因?yàn)檫@個(gè)屬性值不是通過頁(yè)面表單提供的。
  
  新增圖書jsp頁(yè)面
  
  1.通過向?qū)?chuàng)建bookAdd.jsp
  
  通過JSP向?qū)?chuàng)建bookAdd.jsp頁(yè)面,在向?qū)У牡?步選擇使用Struts1.1的struts-bean和struts-html標(biāo)簽,如圖 19所示:
   JBuilder2005 Struts深度體驗(yàn)之新增(圖四)
  圖 19 指定選用Struts標(biāo)簽
  
  2.使用JBuilder的Struts標(biāo)簽構(gòu)建JSP頁(yè)面
  
  你可以直接用拖拽的方法從JBuilder編輯器左邊的標(biāo)簽庫(kù)將Struts標(biāo)簽添加到JSP頁(yè)面中,如圖 20所示:
   JBuilder2005 Struts深度體驗(yàn)之新增(圖五)
  圖 20 用拖拽的方式添加Struts標(biāo)簽
  
  Struts的html標(biāo)簽可以完成和標(biāo)準(zhǔn)的HTML元素相同的功能,Struts提倡使用Struts html標(biāo)簽庫(kù),因?yàn)檫@些標(biāo)簽可以和Struts框架的其他組件緊密地聯(lián)系起來。而Strtus的bean標(biāo)簽庫(kù)可以訪問已經(jīng)存在的JavaBean及其屬性,有一些bean標(biāo)簽還可以訪問HTTP請(qǐng)求頭信息及Web資源文件的信息。
  
  我們希望用Struts的html標(biāo)簽庫(kù)創(chuàng)建添加圖書的表單,通過bean標(biāo)簽庫(kù)訪問Web資源文件作為表單組件前的標(biāo)識(shí)文字。
  
  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不答應(yīng)為空");
  13.  return false;
  14. }
  15. if(form.bookName.value == null form.bookName.value == "")
  16. {
  17.  alert("圖書名不答應(yīng)為空");
  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.  <table width="100%%" border="0">
  28.   <tr>
  29.    <td>
  30.     <bean:message bundle="bookstore" key="bookstore.bookId"/>
  31.    </td>
  32.    <td>
  33.     <html:text name="bookActionForm" property="bookId"/>
  3

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 中国免费一级毛片 | 欧美a∨亚洲欧美亚洲 | 免费在线观看午夜视频 | 国产精品av久久久久久网址 | 999久久国精品免费观看网站 | 亚洲国产精品久久久久久久久久 | 欧美成人黄色小视频 | 亚洲视频综合网 | 91短视频免费 | 成熟女人特级毛片www免费 | 国产一级毛片在线看 | 黄色av电影在线播放 | 久久免费观看一级毛片 | 亚洲性在线视频 | 日韩视频一区 | v11av在线播放 | 91 免费看片 | 大学生一级毛片在线视频 | 久久久久久久久久久亚洲 | 91精品久久久久久久久久久 | 国产一级性生活视频 | 黄色高清免费 | av免费入口 | 国产91久久久久久 | 久久久久久久99 | 99国产精品欲a | 亚欧在线免费观看 | 特大黑人videos与另类娇小 | 久久精品视频首页 | 免费国产成人高清在线看软件 | 久久美女色视频 | 色中色激情影院 | 亚洲免费永久 | 久久久久久久久久性 | 午夜久| 羞羞视频免费入口网站 | 18被视频免费观看视频 | 国产91免费看 | 国产精品免费成人 | 深夜福利视频绿巨人视频在线观看 | 午夜影视一区二区 |