又大又粗又猛免费视频久久_国产理论在线播放_久久男人av资源网站免费软件_99国产精品无码

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

成果圖

我們完成的就是下面的項(xiàng)目!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

搭建配置環(huán)境

  • 配置Tomcat
  • 導(dǎo)入開發(fā)包
  • 建立開發(fā)用到的程序包

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

  • 在數(shù)據(jù)庫(kù)創(chuàng)建相對(duì)應(yīng)的表

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

開發(fā)DAO

DAO應(yīng)該提供增加客戶和查詢用戶的功能

增加用戶

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

開發(fā)servic

提供UI,增加客戶的Servlet

//直接跳轉(zhuǎn)到顯示增加用戶頁(yè)面的JSP request.getRequestDispatcher(“/WEB-INF/addCustomer.jsp”).forward(request, response);

我們發(fā)現(xiàn),在日期的下拉框中,只有一個(gè)數(shù)據(jù)(因?yàn)槲覀冊(cè)趘alue中只寫了一個(gè)數(shù)據(jù))

要想在下拉框中可以選擇很多的數(shù)據(jù),那么value的值就不能單單只有一個(gè)。當(dāng)然了,也不可能在JSP頁(yè)面中寫下面的代碼

<option value=”1900″>1900</option> <option value=”1901″>1900</option> <option value=”1902″>1900</option> <option value=”1903″>1900</option>

我們用javaScript生成下拉框的數(shù)據(jù)就行了!!

  • 獲取年份!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

  • 獲取月份和日也類似

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

  • 在JSP頁(yè)面中導(dǎo)入javascript文件
  • 注意:javasrcipt文件不能放在WEB-INF下面?。。。》駝t是獲取不到的?。。?/strong>

<script type=”text/javascript” src=”${pageContext.request.contextPath}/customer.js” ></script>

  • 這三個(gè)函數(shù)都是在頁(yè)面加載時(shí)就應(yīng)該被初始化了,所以在body上綁定onload時(shí)間即可??!

function pageInit() { makeYear(); makeMonth(); makeDay(); } <body onload=”pageInit()”>

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

開發(fā)處理表單數(shù)據(jù)的Servlet

  • 將表單的數(shù)據(jù)封裝到Bean對(duì)象中,要開發(fā)工具類

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

  • 處理表單數(shù)據(jù)的Servlet代碼:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

提供查詢客戶界面的Servlet

//跳轉(zhuǎn)到顯示客戶界面信息的jsp request.getRequestDispatcher(“/WEB-INF/lookCustomer.jsp”).forward(request, response);

查詢總記錄數(shù)

查詢總記錄數(shù)也就是查詢數(shù)據(jù)庫(kù)表的記錄有多少條,這是關(guān)于對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的操作,所以肯定是在dao層做!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

查詢分頁(yè)的數(shù)據(jù)

獲取分頁(yè)的數(shù)據(jù)也是查詢數(shù)據(jù)庫(kù)的記錄,這也是關(guān)于對(duì)數(shù)據(jù)庫(kù)的操作,所以也是在Dao層做的!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

分析

現(xiàn)在我們已經(jīng)可以知道總記錄數(shù)了,對(duì)于其他3個(gè)變量(每頁(yè)顯示記錄數(shù)【由程序員來指定】,當(dāng)前是多少頁(yè)【由用戶來指定】,總頁(yè)數(shù)【由總記錄數(shù)和每頁(yè)顯示記錄數(shù)來算數(shù)來的】)

現(xiàn)在要分析的是,這些變量應(yīng)該放在哪里呢???全部放在Dao層??全部放在Dao層是可以實(shí)現(xiàn)功能的,但是,這樣MVC結(jié)構(gòu)就被破壞掉了(Dao層只用來對(duì)數(shù)據(jù)進(jìn)行CRUD操作,4個(gè)變量存在Dao層,是不合理的)

最好的做法是這樣的:創(chuàng)建一個(gè)實(shí)體Page,將分頁(yè)用到的信息全部封裝在Page中實(shí)現(xiàn)!Page就代表著分頁(yè)的數(shù)據(jù)這樣就非常符合面向?qū)ο蟮乃枷肓耍?/p>

將數(shù)據(jù)封裝到Page中并在頁(yè)面上顯示分頁(yè)的數(shù)據(jù)

①:創(chuàng)建Page類

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

②:BusinessService應(yīng)該提供獲取分頁(yè)數(shù)據(jù)的服務(wù)

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

③:web層調(diào)用BusinessService層的功能,獲取得到Page對(duì)象

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

④:在JSP頁(yè)面中,使用EL表達(dá)式獲取到Page對(duì)象,從而輸出數(shù)據(jù)

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

⑤:在JSP頁(yè)面中顯示頁(yè)碼,同時(shí)把碼數(shù)綁定到超鏈接去!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

讓分頁(yè)的功能更加完善

顯示當(dāng)前頁(yè)數(shù),總頁(yè)數(shù),總記錄數(shù)

當(dāng)前頁(yè)數(shù)是:[${page.currentPageCount}] 總頁(yè)數(shù)是:${page.totalPageCount} 總記錄數(shù)是:${page.totalRecord}

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

跳轉(zhuǎn)到某頁(yè)上

<input type=”text” id=”currentPageCount”> <input type=”button” value=”跳轉(zhuǎn)”>

  • 頁(yè)面效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

我們現(xiàn)在要做的就是:怎么樣才能輸入框輸入內(nèi)容,然后點(diǎn)擊跳轉(zhuǎn)按鈕,將輸入框的數(shù)據(jù)發(fā)送到Servlet上,然后實(shí)現(xiàn)跳轉(zhuǎn)到某頁(yè)上功能

明顯地,我們肯定要使用JavaScript代碼!

<script type=”text/javascript”> /*既然寫上了JavaScript代碼了,就順便驗(yàn)證輸入框輸入的數(shù)據(jù)是否合法吧*/ function goPage() { /*獲取輸入框控件*/ var input = document.getElementById(“currentPageCount”); /*獲取輸入框的數(shù)據(jù)*/ var value = input.value; if(value==null || value==””){ alert(“請(qǐng)輸入頁(yè)碼”); return false; } if(!value.match(“d “)){ alert(“請(qǐng)輸入數(shù)字”); return false; } if(value<1 || value>${page.totalPageCount}){ alert(“請(qǐng)輸入合法數(shù)據(jù)”); return false ; } window.location.href=”${pageContext.request.contextPath}/LookCustomer?currentPageCount=” value; }</script>

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

記錄JSP頁(yè)面的開始頁(yè)和結(jié)束頁(yè)

為什么我們要記錄JSP頁(yè)面的開始頁(yè)和結(jié)束頁(yè)呢?經(jīng)過上面層層地優(yōu)化,我們感覺不出有什么問題了。那是因?yàn)閿?shù)據(jù)量太少!

我們?cè)囍嗵砑狱c(diǎn)記錄進(jìn)數(shù)據(jù)庫(kù),再回來看看!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

從上面的圖我們可以發(fā)現(xiàn)頁(yè)數(shù)有多少,JSP頁(yè)面就顯示多少!這明顯不合理的,如果有100頁(yè)也顯示100頁(yè)嗎?

我們做一個(gè)規(guī)定,一次只能顯示10頁(yè)的數(shù)據(jù)。那么顯示哪10頁(yè)呢?這又是一個(gè)問題了,如果我們?cè)诳吹?1頁(yè)的數(shù)據(jù),應(yīng)該顯示的是第7到第16頁(yè)的數(shù)據(jù)(顯示11附近的頁(yè)數(shù)),我們?cè)诳吹?頁(yè)的數(shù)據(jù),應(yīng)該顯示第1到第10頁(yè)的數(shù)據(jù)。用戶想要看的頁(yè)數(shù)是不明確的,我們顯示附近的頁(yè)數(shù)也是不明確的!。我們應(yīng)該把用戶想要看的頁(yè)數(shù)記錄下來,然后根據(jù)邏輯判斷,顯示附近的頁(yè)數(shù)

我們顯示頁(yè)數(shù)的代碼是這樣的:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

很明顯,我們只要控制了begin和end中的數(shù)據(jù),就控制顯示哪10頁(yè)了!

①在Page類中多定義兩個(gè)成員變量

//記錄JSP頁(yè)面開始的頁(yè)數(shù)和結(jié)束的頁(yè)數(shù) private int startPage; private int endPage; //Setter,Getter方法

②開始頁(yè)數(shù)和結(jié)束頁(yè)數(shù)受用戶想看的頁(yè)數(shù)影響,在BusinessService的getPageData()加入下面的邏輯

//第一次訪問 page.setStartPage(1); page.setEndPage(10); //不是第一次訪問 if (page.getCurrentPageCount() <= 10) { page.setStartPage(1); page.setEndPage(10); } else { page.setStartPage((int) (page.getCurrentPageCount() – 4)); page.setEndPage((int) (page.getCurrentPageCount() 5)); //如果因?yàn)榧訙p角標(biāo)越界了,那么就設(shè)置最前10頁(yè),或者最后10頁(yè) if (page.getStartPage() < 1) { page.setStartPage(1); page.setEndPage(10); } if (page.getEndPage() > page.getTotalPageCount()) { page.setEndPage(page.getTotalPageCount()); page.setStartPage(page.getTotalPageCount() – 9); } }

③:在JSP顯示頁(yè)數(shù)時(shí),獲取得到開始頁(yè)和結(jié)束頁(yè)就行了

<%–提供頁(yè)數(shù)的界面–%> <c:forEach var=”pageNum” begin=”${page.startPage}” end=”${page.endPage}”> <a href=”${pageContext.request.contextPath}/LookCustomer?currentPageCount=${pageNum}”> [${pageNum}] </a> </c:forEach>

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

重構(gòu)優(yōu)化

分頁(yè)重構(gòu)

我們?cè)倩仡^看看BusinessService中獲取分頁(yè)數(shù)據(jù)的代碼:

//既然Page對(duì)象代表是分頁(yè)數(shù)據(jù),那么返回Page對(duì)象即可! //web層應(yīng)該傳入想要看哪一頁(yè)數(shù)據(jù)的參數(shù)! public Page getPageData(String currentPageCount) { Page page = new Page(); //獲取數(shù)據(jù)庫(kù)中有多少條記錄,并封裝到Page對(duì)象中 Long totalRecord = customerDao.getTotalRecord(); page.setTotalRecord(totalRecord); //算出總頁(yè)數(shù),并封裝到Page對(duì)象中 int totalPagecount = (int) (totalRecord % page.getLinesize() == 0 ? totalRecord / page.getLinesize() : totalRecord / page.getLinesize() 1); page.setTotalPageCount(totalPagecount); int start ; int end = page.getLinesize(); //現(xiàn)在又分兩種情況了,如果傳遞進(jìn)來的參數(shù)是null的,那么說明外界是第一次查詢的 if (currentPageCount == null) { //第一次查詢,就應(yīng)該設(shè)置當(dāng)前頁(yè)數(shù)是第一頁(yè) page.setCurrentPageCount(1); page.setStartPage(1); page.setEndPage(10); start = (int) ((page.getCurrentPageCount() – 1) * page.getLinesize()); List<Customer> customers = customerDao.getPageData(start, end); page.setList(customers); } else { //如果不是第一次,就把外界傳遞進(jìn)來的頁(yè)數(shù)封裝到Page對(duì)象中 page.setCurrentPageCount(Long.parseLong(currentPageCount)); start = (int) ((page.getCurrentPageCount() – 1) * page.getLinesize()); if (page.getCurrentPageCount() <= 10) { page.setStartPage(1); page.setEndPage(10); } else { page.setStartPage((int) (page.getCurrentPageCount() – 4)); page.setEndPage((int) (page.getCurrentPageCount() 5)); //如果因?yàn)榧訙p角標(biāo)越界了,那么就設(shè)置最前10頁(yè),或者最后10頁(yè) if (page.getStartPage() < 1) { page.setStartPage(1); page.setEndPage(10); } if (page.getEndPage() > page.getTotalPageCount()) { page.setEndPage(page.getTotalPageCount()); page.setStartPage(page.getTotalPageCount() – 9); } } List<Customer> customers = customerDao.getPageData(start, end); page.setList(customers); } return page; }

太太太太太tm復(fù)雜,太太太太tm長(zhǎng)了!?。。?!我們BusinessService要做的僅僅是調(diào)用Dao層的功能,為web層提供數(shù)據(jù),但我們?cè)诜椒ㄖ惺褂么罅苛诉壿嬇袛啵疫@些邏輯判斷都是屬于Page類的!

明確一下:只有獲取數(shù)據(jù)庫(kù)總記錄數(shù)是在BusinessService中做的,其他的數(shù)據(jù)變量都是應(yīng)該在Page類中完成!

在BusinessService獲取了總記錄數(shù)之后,我們要對(duì)其他變量進(jìn)行初始化(根據(jù)總記錄數(shù),用戶想要看哪一頁(yè)的數(shù)據(jù)),算出其他的數(shù)據(jù)(JSP記錄開始頁(yè)數(shù)、結(jié)束頁(yè)數(shù)、總頁(yè)數(shù)等等),最好的辦法就是通過Page的構(gòu)造函數(shù)來實(shí)現(xiàn)初始化!

  • 改良后的BusinessService

public Page getPageData2(String currentPageCount) { //獲取得到總記錄數(shù) Long totalPageCount = customerDao.getTotalRecord(); if (currentPageCount == null) { //如果是第一次,那么就將用戶想看的頁(yè)數(shù)設(shè)置為1 Page page = new Page(1, totalPageCount); List<Customer> customers = customerDao.getPageData(page.getStartIndex(), page.getLinesize()); page.setList(customers); return page; } else { //如果不是第一次,就將獲取得到的頁(yè)數(shù)傳遞進(jìn)去 Page page = new Page(Integer.parseInt(currentPageCount), totalPageCount); List<Customer> customers = customerDao.getPageData(page.getStartIndex(), page.getLinesize()); page.setList(customers); return page; } }

  • 改良后的Page類(原來的Page類只有成員變量和setter、getter方法)

public Page(int currentPageCount, long totalRecord) { //將傳遞進(jìn)來的currentPageCount初始化 this.currentPageCount = currentPageCount; //總頁(yè)數(shù) totalPageCount = (int) (totalRecord % linesize == 0 ? totalRecord / linesize : totalRecord / linesize 1); //總記錄數(shù) this.totalRecord = totalRecord; //開始取數(shù)據(jù)的位置 startIndex = (currentPageCount – 1) * linesize; //如果當(dāng)前頁(yè)小于10,那么開始頁(yè)為1,結(jié)束頁(yè)為10就行了 if (this.currentPageCount <= 10) { this.startPage = 1; this.endPage = 10; } else { startPage = this.currentPageCount – 4; endPage = this.currentPageCount 5; //加減后頁(yè)數(shù)越界的情況 if (startPage < 1) { this.startPage = 1; this.endPage = 10; } if (endPage > totalPageCount) { this.startPage = this.currentPageCount – 9; this.endPage = this.totalPageCount; } } }

分頁(yè)顯示頁(yè)面重構(gòu)

分頁(yè)的顯示頁(yè)面都是永恒不變的,我們可以把代碼重構(gòu)成一個(gè)jsp,需要用到分頁(yè)顯示頁(yè)面的地方,就包含進(jìn)去就行了!

  • page.jsp

<%@ page contentType=”text/html;charset=UTF-8″ language=”java” %> <%@taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %> <%–顯示當(dāng)前頁(yè)數(shù)–%> 當(dāng)前頁(yè)數(shù)是:[${page.currentPageCount}] <%–如果當(dāng)前的頁(yè)碼大于1,才顯示上一步–%> <c:if test=”${page.currentPageCount>1}”> <%–把傳遞過去的頁(yè)碼-1就行了–%> <a href=”${pageContext.request.contextPath}/LookCustomer?currentPageCount=${page.currentPageCount-1}”> 上一步 </a> </c:if> <%–提供頁(yè)數(shù)的界面–%> <c:forEach var=”page” begin=”${page.startPage}” end=”${page.endPage}”> <a href=”${pageContext.request.contextPath}/LookCustomer?currentPageCount=${page}”> [${page}] </a> </c:forEach> <%–如果當(dāng)前的頁(yè)碼小于總頁(yè)數(shù),才顯示下一步–%> <c:if test=”${page.currentPageCount<page.totalPageCount}”> <%–把傳遞過去的頁(yè)碼-1就行了–%> <a href=”${pageContext.request.contextPath}/LookCustomer?currentPageCount=${page.currentPageCount 1}”> 下一步 </a> </c:if> <input type=”text” id=”currentPageCount”> <input type=”button” value=”跳轉(zhuǎn)” onclick=”goPage()”> 總頁(yè)數(shù)是:${page.totalPageCount} 總記錄數(shù)是:${page.totalRecord} <script type=”text/javascript”> /*既然寫上了JavaScript代碼了,就順便驗(yàn)證輸入框輸入的數(shù)據(jù)是否合法吧*/ function goPage() { /*獲取輸入框控件*/ var input = document.getElementById(“currentPageCount”); /*獲取輸入框的數(shù)據(jù)*/ var value = input.value; if(value==null || value==””){ alert(“請(qǐng)輸入頁(yè)碼”); return false; } if(!value.match(“d “)){ alert(“請(qǐng)輸入數(shù)字”); return false; } if(value<1 || value>${page.totalPageCount}){ alert(“請(qǐng)輸入合法數(shù)據(jù)”); return false ; } window.location.href=”${pageContext.request.contextPath}/LookCustomer?currentPageCount=” value; } </script>

用需要用到的地方,導(dǎo)入即可!

<jsp:include page=”page.jsp”></jsp:include>

為了做到更好的通用性,處理分頁(yè)數(shù)據(jù)的url應(yīng)該由Servlet傳進(jìn)去給Page類,讓Page類封裝起來!要使用的時(shí)候,再用Page取出來就行了。

下面寫法已經(jīng)固定了,不夠靈活!也就是說,下面的url地址不應(yīng)該寫死的

${pageContext.request.contextPath}/LookCustomer?currentPageCount=${page.currentPageCount 1}

我們可以這樣做:

  • 在Controller上獲取Servlet的名稱,在傳遞用戶想要看的頁(yè)數(shù)的同時(shí),把Servlet的url也傳遞進(jìn)去

String servletName = this.getServletName(); //調(diào)用BusinessService的方法,獲取得到所有客戶信息 BusinessService businessService = new BusinessService(); //把Servlet的url也傳遞進(jìn)去 Page page = businessService.getPageData2(currentPageCount, request.getContextPath() “/” servletName);

  • 在Page類上,多增加一個(gè)成員變量

private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; }

  • 在BusinessService接受到web層傳遞進(jìn)來的url,set到Page對(duì)象上就行了!

page.setUrl(url);

我們?cè)趈sp頁(yè)面跳轉(zhuǎn)到處理分頁(yè)數(shù)據(jù)的Servlet上,就再不用寫死了。直接用Page對(duì)象中獲取出來就行了!

<%–把傳遞過去的頁(yè)碼-1就行了–%> <a href=”${page.url}?currentPageCount=${page.currentPageCount-1}”> 上一步 </a>

開發(fā)web的刪除和修改

在查詢jsp頁(yè)面上,增添刪除和修改的操作鏈接!

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

開發(fā)處理刪除操作的Servlet

超鏈接綁定要?jiǎng)h除用戶的id,帶過去給Controller

<a href=”${pageContext.request.contextPath}/DeleteCustomer?id=${customer.id}”>刪除</a>

controller的代碼也十分簡(jiǎn)單:

String id = request.getParameter(“id”); //調(diào)用BusinessService層的功能,就可以完成刪除操作了 BusinessService businessService = new BusinessService(); businessService.deleteCustomer(id);

刪除客戶記錄也是一件非常重要的事情,應(yīng)該提供JavaSrcript代碼詢問是否要真的刪除

在超鏈接控件上綁定事件!

<a href=”${pageContext.request.contextPath}/DeleteCustomer?id=${customer.id}” onclick=” return sureDelete()”>刪除</a> function sureDelete() { var b = window.confirm(“你確定要?jiǎng)h除嗎?”); if(b) { return true; }else { return false; } }

修改操作

修改操作的流程是這樣的:點(diǎn)擊修改超鏈接,跳轉(zhuǎn)到該用戶的詳細(xì)信息頁(yè)面,在詳細(xì)信息頁(yè)面中修改數(shù)據(jù),再提交修改!【跳轉(zhuǎn)到用戶詳細(xì)信息頁(yè)面時(shí),用戶的id還在的,在提交數(shù)據(jù)的時(shí)候,記得把id也給到服務(wù)器,【id是不包含在表單中的,要我們自己提交過去】!】

<a href=”${pageContext.request.contextPath}/UpdateCustomerUI?=${customer.id}”>修改</a>

開發(fā)提供用戶詳細(xì)信息的Servlet

String id = request.getParameter(“id”); BusinessService businessService = new BusinessService(); //通過id獲取得到用戶的詳細(xì)信息 Customer customer = businessService.findCustomer(id); request.setAttribute(“customer”, customer); //跳轉(zhuǎn)到顯示用戶詳細(xì)信息的jsp頁(yè)面上 request.getRequestDispatcher(“/WEB-INF/customerInformation”).forward(request, response);

開發(fā)顯示用戶信息的JSP【數(shù)據(jù)回顯】

想要日期能夠選擇,記得導(dǎo)入JavaScript代碼,響應(yīng)事件!

注意:在顯示頁(yè)面上,一定要把id傳遞過去給處理表單的Servlet,不然服務(wù)器是不知道你要修改哪一條數(shù)據(jù)的!

  • 效果:

「JavaWeb基礎(chǔ)」客戶關(guān)系管理系統(tǒng)(修訂版)(完整的客戶關(guān)系管理系統(tǒng))

總結(jié)

  1. 在dao層中,我們有添加客戶、通過id查找用戶、刪除用戶、修改用戶信息的方法。
  2. 日期我們一般用下拉框來給用戶選取,要想下拉框的信息有足夠多的數(shù)據(jù),我們需要用到JavaScript【DOM編程動(dòng)態(tài)增加和修改數(shù)據(jù)】
  3. javasrcipt文件不能放在WEB-INF目錄下面
  4. 日期的數(shù)據(jù)通過下拉框選取,年、月、日是分散的,我們需要把他們拼接,于是我們也用JavaScript來拼接【減低服務(wù)器端的壓力】
  5. 開發(fā)工具方法request2Bean,主要用到了BeanUtils框架,這樣就不用在Servlet一個(gè)一個(gè)封裝了。
  6. 在JSP判斷集合是否有元素時(shí),我們可以用EL表達(dá)式${empty(集合)}。
  7. 如果記錄數(shù)有很多,我們應(yīng)該使用分頁(yè)技術(shù),一般地,我們使用Page類來封裝分頁(yè)的數(shù)據(jù)
  8. 要使用分頁(yè)技術(shù),就必須在數(shù)據(jù)庫(kù)用查詢總記錄數(shù),通過總記錄數(shù),就可以算出總頁(yè)數(shù)了【每頁(yè)顯示多少條記錄由我們說了算】
  9. 在dao層還要編寫獲取具體的分頁(yè)數(shù)據(jù),從哪里開始,哪里結(jié)束,返回一個(gè)List集合,再把List集合封裝到Page對(duì)象上
  10. 由于獲取分頁(yè)數(shù)據(jù)需要當(dāng)前的頁(yè)數(shù)是多少,(所以在service中要判斷當(dāng)前頁(yè)數(shù)是否存在,如果不存在,那么就設(shè)置為1)【更新,我認(rèn)為在Controller判斷會(huì)好一點(diǎn)】
  11. 分頁(yè)中,我們還支持上一頁(yè)和下一頁(yè)的功能,如果頁(yè)數(shù)大于1,才顯示上一頁(yè),如果頁(yè)數(shù)小于1,才顯示下一頁(yè)。
  12. 給出下拉框進(jìn)行頁(yè)數(shù)跳轉(zhuǎn),使用JavaScript事件機(jī)制,獲取頁(yè)數(shù),再提交給Servlet處理即可
  13. 我們還要控制頁(yè)數(shù)的顯示,因?yàn)椴豢赡苡?00頁(yè),我們就顯示100頁(yè),這樣是不可能的。在Page類中維護(hù)兩個(gè)變量,startPage,endPage。我們規(guī)定每次只能顯示10頁(yè)數(shù)據(jù),如果第一次訪問就顯示1-10頁(yè)。如果當(dāng)前頁(yè)數(shù)大于10,那么就顯示6-15頁(yè)。如果角標(biāo)越界了,那么就顯示前10頁(yè)或者后10頁(yè)
  14. 我們把顯示分頁(yè)的頁(yè)面封裝成單獨(dú)的jsp,使用的Servlet連接也可以用url變量來維護(hù)。
  15. 前臺(tái)數(shù)據(jù)做拼接,最終都是把拼接好的數(shù)據(jù)用一個(gè)隱藏域封裝起來,隨后讓form表單一起提交

原文地址:https://dwz.cn/kSaxWpBW

作者:Java3y

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部