第5章MVC框架開發(fā)基礎(chǔ)_第1頁(yè)
第5章MVC框架開發(fā)基礎(chǔ)_第2頁(yè)
第5章MVC框架開發(fā)基礎(chǔ)_第3頁(yè)
第5章MVC框架開發(fā)基礎(chǔ)_第4頁(yè)
第5章MVC框架開發(fā)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、5.1MVC基本思想基本思想5.25.3MVC關(guān)鍵技術(shù)關(guān)鍵技術(shù)MVC綜合開發(fā)實(shí)戰(zhàn)綜合開發(fā)實(shí)戰(zhàn)MVC把應(yīng)用程序分成3大基本模塊:模型(Model,簡(jiǎn)稱M)、視圖(View,簡(jiǎn)稱V)和控制器(Controller,簡(jiǎn)稱C),它們(三者聯(lián)合即MVC)分別擔(dān)當(dāng)不同的任務(wù)。這幾個(gè)模塊各自的職能及相互關(guān)系,如圖5.1所示。5.2.1 DAO技術(shù)技術(shù)1DAO原理原理DAO(Data Access Object,數(shù)據(jù)訪問對(duì)象)是程序員定義的一種接口,它介于數(shù)據(jù)庫(kù)資源和業(yè)務(wù)邏輯之間,其意圖是將底層數(shù)據(jù)訪問操作與高層業(yè)務(wù)邏輯完全分開。在數(shù)據(jù)庫(kù)編程的時(shí)候,經(jīng)常遇到這樣的情況:一個(gè)用戶的數(shù)據(jù)訪問模塊,里面的操作方法有

2、insert、delete、update、select等,對(duì)不同數(shù)據(jù)庫(kù)其實(shí)現(xiàn)的細(xì)節(jié)是不同的。因此,不太可能針對(duì)每種類型的數(shù)據(jù)庫(kù)做一個(gè)通用的對(duì)象來(lái)實(shí)現(xiàn)這些操作。這時(shí)候,就可以定義一個(gè)用戶數(shù)據(jù)訪問對(duì)象的接口IUserDAO,提供insert、delete、update、select等抽象方法。不同類型數(shù)據(jù)庫(kù)的用戶訪問對(duì)象只要實(shí)現(xiàn)這個(gè)接口就可以了,如圖5.2所示。2舉例舉例在【實(shí)例五】(4.1.2節(jié))中,利用Hibernate的ORM功能實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)表的對(duì)象化操作,然而,validate.jsp(登錄驗(yàn)證)的代碼中仍然存留有操作數(shù)據(jù)庫(kù)的語(yǔ)句,如:/查詢userTable表中的記錄String hq

3、l=from UserTable u where u.username=? and u.password=?;Query query=HibernateSessionFactory.getSession().createQuery(hql);query.setParameter(0, usr);query.setParameter(1, pwd);List users=query.list();【實(shí)例六】采用JSP+DAO+Hibernate方式開發(fā)一個(gè)Web登錄程序。要求:用DAO接口來(lái)操作Hibernate生成的UserTable對(duì)象。(1)創(chuàng)建)創(chuàng)建Java EE項(xiàng)目項(xiàng)目新建Java E

4、E項(xiàng)目,項(xiàng)目命名jsp_dao_hibernate。在項(xiàng)目src下創(chuàng)建兩個(gè)包:org.easybooks.test.factory和org.easybooks.test.model.vo。(2)添加)添加Hibernate及生成及生成POJO類類操作方法與【實(shí)例五】(4.1.2節(jié))的第(2)、(3)步完全相同,不再贅述。(3)定義并實(shí)現(xiàn))定義并實(shí)現(xiàn)DAO在項(xiàng)目src下創(chuàng)建包org.easybooks.test.dao,右擊選擇菜單【New】【Interface】,在如圖5.3所示的【New Java Interface】窗口的Name欄輸入IUserTableDAO,單擊【Finish】按鈕,

5、創(chuàng)建一個(gè)DAO接口。在IUserTableDAO.java中定義DAO接口,代碼如下:package org.easybooks.test.dao;import org.easybooks.test.model.vo.*;public interface IUserTableDAO public UserTable validateUser(String username, String password);/方法:驗(yàn)證用戶名密碼接口中定義了一個(gè)validateUser()方法,用于驗(yàn)證用戶,這個(gè)方法的具體實(shí)現(xiàn)在org.easybooks. test.dao.impl包下的UserTableD

6、AO類中。在src下創(chuàng)建org.easybooks.test.dao.impl包,在包中創(chuàng)建類UserTableDAO,此類實(shí)現(xiàn)了接口中的validateUser()方法。(4)創(chuàng)建)創(chuàng)建JSP本例也有4個(gè)JSP文件,其中l(wèi)ogin.jsp、main.jsp和error.jsp這3個(gè)文件的源碼與【實(shí)例五】(4.1.2節(jié))程序的完全相同,但validate.jsp文件的代碼有了很大的改變。validate.jsp文件的代碼。1MVC的實(shí)現(xiàn)的實(shí)現(xiàn) 用Hibernate把數(shù)據(jù)庫(kù)表映射為POJO類,并用DAO技術(shù)將其封裝入接口,形成持久層數(shù)據(jù)模型(M)。 JSP文件單純地只作為網(wǎng)頁(yè)視圖(V),顯示應(yīng)用

7、程序界面和數(shù)據(jù)。 Struts 2擔(dān)任控制器(C)的角色,負(fù)責(zé)按程序流程調(diào)用數(shù)據(jù)模型和控制網(wǎng)頁(yè)跳轉(zhuǎn)。顯然,這需要同時(shí)整合Struts 2和Hibernate兩個(gè)框架,參考圖3.3,得到如圖5.4所示Java EE系統(tǒng)的MVC解決方案。2舉例舉例【實(shí)例七】采用JSP+Struts 2+DAO+Hibernate方式開發(fā)一個(gè)Web登錄程序。要求:將前面介紹過的Struts 2和Hibernate兩大框架整合起來(lái)使用,參照?qǐng)D5.4所示的系統(tǒng)結(jié)構(gòu),嚴(yán)格貫徹MVC的思想開發(fā)。其中,JSP作為視圖V顯示登錄、成功或失敗頁(yè);Struts 2作為控制器C處理頁(yè)面跳轉(zhuǎn);Hibernate用作數(shù)據(jù)模型M,它與前臺(tái)

8、程序的接口以DAO形式提供。(1)創(chuàng)建)創(chuàng)建Java EE項(xiàng)目項(xiàng)目新建Java EE項(xiàng)目,項(xiàng)目命名jsp_struts2_dao_hibernate。在項(xiàng)目src下創(chuàng)建兩個(gè)包:org.easybooks.test. factory和org.easybooks.test.model.vo。(2)M層開發(fā)層開發(fā)添加添加Hibernate、生成、生成POJO類及編寫類及編寫DAO 添加Hibernate。操作方法同【實(shí)例五】(4.1.2節(jié))第(2)步,略。 生成POJO類。操作方法同【實(shí)例五】第(3)步,略。 在項(xiàng)目src下創(chuàng)建包org.easybooks.test.dao和org.easybook

9、s.test.dao.impl,分別用于存放DAO接口IUserTableDAO及其實(shí)現(xiàn)類UserTableDAO。DAO接口和類的代碼與【實(shí)例六】的完全相同,在此省略。(3)C層開發(fā)層開發(fā)加載加載Struts 2包、實(shí)現(xiàn)包、實(shí)現(xiàn)Action及控制器配置及控制器配置 加載、配置Struts 2。步驟與【實(shí)例四】(3.1.2節(jié))第(2)、(3)步相同,稍有差別的是,這里僅需加載Struts 2的9個(gè)jar包即可,因在剛剛添加Hibernate時(shí),數(shù)據(jù)庫(kù)的驅(qū)動(dòng)包已被自動(dòng)載入進(jìn)來(lái),無(wú)須重復(fù)加載。配置文件web.xml內(nèi)容與【實(shí)例四】完全相同,不再給出。 實(shí)現(xiàn)Action。在項(xiàng)目src文件夾下建立包o

10、rg.easybooks.test.action,在包里創(chuàng)建MainAction類,代碼所示。將上段代碼與【實(shí)例四】第(6)步的MainAction類的代碼比較一下,就會(huì)發(fā)現(xiàn),其中已沒有操作數(shù)據(jù)庫(kù)的代碼了!由此可見使用DAO封裝所帶來(lái)的好處。 配置Action。在src下創(chuàng)建文件struts.xml,配置內(nèi)容與【實(shí)例四】完全一樣,在此省略。(4)V層開發(fā)層開發(fā)編寫編寫JSP文件文件有了M、C這兩層的功能,V層開發(fā)的任務(wù)就簡(jiǎn)單多了,只剩下編寫3個(gè)JSP文件:login.jsp、main.jsp和error.jsp。它們的代碼與【實(shí)例四】的也完全一樣,略。部署運(yùn)行程序,效果如圖2.13所示。5.3

11、.1 MVC綜合開發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于綜合開發(fā)實(shí)戰(zhàn):學(xué)生選課系統(tǒng)(基于SQL Server)【綜合案例四】采用MVC(JSP+Struts 2+DAO+Hibernate)方式開發(fā)一個(gè)學(xué)生選課系統(tǒng)。學(xué)生登錄系統(tǒng)后,可以查看、修改個(gè)人信息;查看個(gè)人選課情況;選定課程及退選課程。要求:在【實(shí)例七】(5.2.2節(jié))基礎(chǔ)上修改擴(kuò)充而成,【實(shí)例七】已經(jīng)具備了一個(gè)完整的MVC項(xiàng)目的框架,但它只有最簡(jiǎn)單的Web登錄功能,本例就以它為“藍(lán)本”進(jìn)一步擴(kuò)充成一個(gè)實(shí)現(xiàn)多種應(yīng)用功能的“學(xué)生選課系統(tǒng)”。項(xiàng)目嚴(yán)格遵照MVC模式去開發(fā),后臺(tái)數(shù)據(jù)庫(kù)用SQL Server 2008/2012。1建立數(shù)據(jù)庫(kù)及表結(jié)構(gòu)建立數(shù)據(jù)

12、庫(kù)及表結(jié)構(gòu)該系統(tǒng)需要建立登錄表(DLB)、學(xué)生表(XSB)、專業(yè)表(ZYB)、課程表(KCB)以及學(xué)生課程表(XS_KCB)即連接表。其中學(xué)生表和專業(yè)表是多對(duì)一關(guān)系,學(xué)生表和課程表是多對(duì)多關(guān)系。具體表結(jié)構(gòu)見附錄A,完成后預(yù)先錄入樣本數(shù)據(jù)。2創(chuàng)建創(chuàng)建Java EE項(xiàng)目項(xiàng)目新建Java EE項(xiàng)目,項(xiàng)目命名Struts_Hibernate。在項(xiàng)目src下創(chuàng)建兩個(gè)包:org.factory和org.model。3登錄選課系統(tǒng)登錄選課系統(tǒng)(1)M層開發(fā)層開發(fā) 添加Hibernate。操作方法同【實(shí)例五】(4.1節(jié))第(2)步,生成的HibernateSessionFactory.java文件置于org.

13、factory包中。 生成POJO類及映射文件。操作方法同【實(shí)例五】第(3)步,不過這里要生成登錄表、課程表、學(xué)生表和專業(yè)表一共4個(gè)表的POJO類及其映射文件,統(tǒng)一置于org.model包下。因各表間有對(duì)應(yīng)的關(guān)系,除了登錄表、專業(yè)表的對(duì)應(yīng)類及映射文件外,其它需要修改(加黑語(yǔ)句)。Xsb.java代碼改為。對(duì)應(yīng)映射文件Xsb.hbm.xml代碼改為。Kcb.java代碼改為。對(duì)應(yīng)映射文件Kcb.hbm.xml代碼改為: 為了使程序能正確處理多對(duì)多關(guān)系和操作連接表,對(duì)自動(dòng)生成的hibernate.cfg.xml配置文件要進(jìn)行微小的改動(dòng),指明所連接到的數(shù)據(jù)庫(kù)名稱,如下:org.hibernate.d

14、ialect.SQLServerDialectjdbc:sqlserver:/localhost:1433;databaseName=XSCJ DAO層組件實(shí)現(xiàn)。在項(xiàng)目src下創(chuàng)建包org.dao和org.dao.impl,分別用于存放DAO接口及其實(shí)現(xiàn)類。 登錄接口。登錄接口中封裝了validate方法,完成對(duì)用戶的驗(yàn)證功能,系統(tǒng)根據(jù)輸入的學(xué)號(hào)和口令進(jìn)行用戶合法性驗(yàn)證,驗(yàn)證通過才允許進(jìn)入系統(tǒng)主頁(yè)面。DlDao.java接口,定義如下:package org.dao;import org.model.Dlb;public interface DlDao /方法:根據(jù)學(xué)號(hào)和口令查詢public

15、Dlb validate(String xh, String kl);其對(duì)應(yīng)的實(shí)現(xiàn)類DlDaoImp.java,代碼為。 學(xué)生接口。學(xué)生接口中封裝了getOneXs和update兩個(gè)方法,分別用于獲取指定學(xué)號(hào)的學(xué)生個(gè)人信息和修改某個(gè)學(xué)生的信息。XsDao.java接口,定義如下:package org.dao;import org.model.Xsb;public interface XsDao /方法:根據(jù)學(xué)號(hào)查詢學(xué)生信息public Xsb getOneXs(String xh);/方法:修改學(xué)生信息public void update(Xsb xs);其對(duì)應(yīng)的實(shí)現(xiàn)類XsDaoImp.ja

16、va,代碼為。 專業(yè)接口。專業(yè)接口中封裝了getOneZy和getAll兩個(gè)方法,分別用于查詢某個(gè)專業(yè)的信息以及獲取所有專業(yè)信息。ZyDao.java接口,定義如下:package org.dao;import java.util.*;import org.model.Zyb;public interface ZyDao /方法:根據(jù)專業(yè) ID 查詢專業(yè)信息public Zyb getOneZy(Integer zyId);/方法:查詢所有專業(yè)信息public List getAll();對(duì)應(yīng)的實(shí)現(xiàn)類ZyDaoImp.java,代碼為。 課程接口。課程接口中封裝了getOneKc和getAll

17、兩個(gè)方法,分別用于查詢某門課程的信息以及獲取所有課程的信息。KcDao.java接口,定義如下:package org.dao;import java.util.*;import org.model.Kcb;public interface KcDao /方法:根據(jù)課程號(hào)查詢課程信息public Kcb getOneKc(String kch);/方法:查詢所有課程的信息public List getAll();對(duì)應(yīng)的實(shí)現(xiàn)類KcDaoImp.java,代碼為。(2)C層開發(fā)層開發(fā) 加載、配置Struts 2。步驟與【實(shí)例四】(3.1.2節(jié))第(2)、(3)步相同,稍有差別的是,這里僅需加載St

18、ruts 2的9個(gè)jar包即可,因在添加Hibernate時(shí),數(shù)據(jù)庫(kù)的驅(qū)動(dòng)包已被自動(dòng)載入,無(wú)須重復(fù)加載。配置文件web.xml內(nèi)容與【實(shí)例四】完全相同,不再給出。 實(shí)現(xiàn)Action。在項(xiàng)目src文件夾下建立包org.action,在包里創(chuàng)建LoginAction類,代碼所示。 配置Action。在src下創(chuàng)建文件struts.xml,配置如下:/main.jsp/login.jsp/這里以后添加Action配置,后面配置的Action都要添加在這里(3)V層開發(fā)層開發(fā) 登錄界面。登錄界面由login.jsp實(shí)現(xiàn),代碼為。 主頁(yè)面。選課系統(tǒng)的主頁(yè)面main.jsp由head.jsp、left.j

19、sp及rigth.jsp組合而成。 主頁(yè)。主頁(yè)main.jsp,代碼如下:學(xué)生選課系統(tǒng) 主頁(yè)頭。主頁(yè)頭部依然是前面的那個(gè)主題標(biāo)頭圖片,head.jsp內(nèi)容為: 功能導(dǎo)航。頁(yè)面左部是一系列功能導(dǎo)航的鏈接,單擊提交給不同功能的Action模塊去處理。left.jsp代碼如下:查詢個(gè)人信息修改個(gè)人信息個(gè)人選課情況所有課程信息 內(nèi)容區(qū)。頁(yè)面右部是加載網(wǎng)頁(yè)顯示內(nèi)容的區(qū)域,初始為空白。right.jsp是一個(gè)僅顯示背景色的空頁(yè),如下:到目前為止,學(xué)生選課系統(tǒng)的MVC框架及最基本的登錄功能已經(jīng)做好了,部署運(yùn)行一下查看效果。初始登錄頁(yè)如圖5.5所示。登錄成功后進(jìn)入主界面,如圖5.6所示。4查詢個(gè)人信息查詢個(gè)人

20、信息主界面左側(cè)第一個(gè)導(dǎo)航功能是“查詢個(gè)人信息”,從left.jsp中可以發(fā)現(xiàn),其提交給xsInfo.action,對(duì)應(yīng)Action配置如下:/xsInfo.jsp由于學(xué)生的個(gè)人信息中有照片,這里的處理思路是把要處理照片的信息提交給Action類來(lái)讀取,所以要加入名為getImage的Action。編寫XsAction來(lái)實(shí)現(xiàn)學(xué)生信息的查詢。XsAction.java的代碼所示。成功后跳轉(zhuǎn)的頁(yè)面xsInfo.jsp,代碼為。這樣查詢學(xué)生個(gè)人信息的功能就完成了,部署運(yùn)行程序,登錄,單擊“查詢個(gè)人信息”導(dǎo)航鏈接,可以查看當(dāng)前用戶的個(gè)人信息,如圖5.7所示。5修改個(gè)人信息修改個(gè)人信息(1)呈現(xiàn)修改學(xué)生信

21、息頁(yè))呈現(xiàn)修改學(xué)生信息頁(yè)下面再來(lái)開發(fā)修改學(xué)生信息的功能。單擊“修改個(gè)人信息”超鏈接,從left.jsp中可以看出提交給了updateXsInfo.action,該Action的配置為:/updateXsInfo.jsp所以就要在XsAction類中加入下面的方法:/進(jìn)入修改學(xué)生信息頁(yè)面public String updateXsInfo() throws Exception/獲取當(dāng)前用戶對(duì)象Map session=(Map)ActionContext.getContext().getSession();Dlb user=(Dlb)session.get(user);xsDao=new XsDa

22、oImp();ZyDao zyDao=new ZyDaoImp();/取出所有專業(yè)信息,因?yàn)樵谛薷膶W(xué)生信息時(shí),專業(yè)欄是下拉列表選擇專業(yè),而不是學(xué)生自己隨便填寫List zys=zyDao.getAll();Xsb xs=xsDao.getOneXs(user.getXh();/得到當(dāng)前學(xué)生的信息Map request=(Map)ActionContext.getContext().get(request);request.put(zys, zys);request.put(xs, xs);return SUCCESS;修改學(xué)生信息頁(yè)面updateXsInfo.jsp的代碼所示。(2)修改操作的

23、實(shí)現(xiàn))修改操作的實(shí)現(xiàn)當(dāng)單擊【修改】按鈕后,就把學(xué)生自己填寫的內(nèi)容提交給了updateXs.action,對(duì)應(yīng)Action的配置如下:/updateXs_success.jspXsAction類中要加入下面的代碼來(lái)處理請(qǐng)求。修改成功后跳轉(zhuǎn)到updateXs_success.jsp頁(yè)面,代碼如下:恭喜你,修改成功!部署運(yùn)行程序,登錄、單擊主頁(yè)上的“修改個(gè)人信息”導(dǎo)航鏈接,程序以控件表單的方式呈現(xiàn)出該用戶原來(lái)的舊信息以供修改,如圖5.8所示。把用戶信息修改為如圖5.9所示狀態(tài):姓名“王林”改為“周何駿”;專業(yè)下拉改選為“通信工程”;出生時(shí)間改為“1995-09-25”(必須嚴(yán)格按此格式填寫);增加備

24、注信息“輔修計(jì)算機(jī)”;總學(xué)分改為100;單擊【瀏覽】按鈕,彈出對(duì)話框,選擇某個(gè)路徑下預(yù)先保存的照片。完成后單擊【修改】按鈕提交,系統(tǒng)會(huì)提示用戶修改成功。然后再單擊“查詢個(gè)人信息”超鏈接就會(huì)出現(xiàn)新的個(gè)人信息頁(yè),如圖5.10所示。6選課與退選課程選課與退選課程(1)查看個(gè)人選課情況)查看個(gè)人選課情況left.jsp文件的第三個(gè)超鏈接是查詢學(xué)生的選課情況,這個(gè)功能很容易實(shí)現(xiàn)。只要查出該學(xué)生信息,由于級(jí)聯(lián)到第三張表的信息,所以只要取出該生信息的Set集合的內(nèi)容,遍歷出來(lái)就行了。下面是Action配置代碼:/xsKcs.jsp對(duì)應(yīng)的XsAction類中的處理方法,代碼如下:/得到學(xué)生選修的課程publi

25、c String getXsKcs() throws ExceptionMap session=(Map)ActionContext.getContext().getSession();Dlb user=(Dlb)session.get(user);String xh=user.getXh();Xsb xsb=new XsDaoImp().getOneXs(xh);/得到當(dāng)前學(xué)生的信息Set list=xsb.getKcs();/取出選修的課程 SetMap request=(Map)ActionContext.getContext().get(request);request.put(lis

26、t,list);/保存return SUCCESS;查詢成功后的xsKcs.jsp頁(yè)面,代碼所示。部署運(yùn)行程序,登錄后單擊“個(gè)人選課情況”超鏈接,可以查看當(dāng)前用戶的個(gè)人選課情況,如圖5.11所示。(2)查詢所有課程信息)查詢所有課程信息在left.jsp中還有一個(gè)鏈接就是查詢所有課程,其實(shí)查詢出所有課程就是為了方便讓學(xué)生選課,其Action配置如下:/allKc.jsp對(duì)應(yīng)Action實(shí)現(xiàn)類,可以發(fā)現(xiàn)一個(gè)新的Action類名為KcAction.java,代碼如下:package org.action;import java.util.*;import org.dao.*;import org.

27、dao.imp.*;import com.opensymphony.xwork2.*;public class KcAction extends ActionSupportpublic String execute()throws ExceptionKcDao kcDao=new KcDaoImp();List list=kcDao.getAll();/獲取所有課程信息Map request=(Map)ActionContext.getContext().get(request);request.put(list, list);/保存到requestreturn SUCCESS;顯示所有課程信

28、息列表的JSP頁(yè)allKc.jsp,代碼為。部署運(yùn)行程序,登錄、在主頁(yè)上單擊“所有課程信息”超鏈接,可顯示所有課程的信息列表,如圖5.12所示。(3)選修課程)選修課程在圖5.12中,每個(gè)課程的后面都有個(gè)“選修”超鏈接,提交給selectKc.action,該Action的配置如下:/selectKc_success.jsp/selectKc_fail.jsp對(duì)應(yīng)Action實(shí)現(xiàn)類的方法(由于是學(xué)生選課,所以該方法在XsAction中),代碼如下:/選定課程public String selectKc() throws ExceptionMap session=(Map)ActionConte

29、xt.getContext().getSession();String xh=(Dlb)session.get(user).getXh();xsDao=new XsDaoImp();Xsb xs3=xsDao.getOneXs(xh);Set list=xs3.getKcs();Iterator iter=list.iterator();/選修課程時(shí)先遍歷已經(jīng)選的課程,如果在已經(jīng)選修的課程中找到就返回 ERRORwhile(iter.hasNext()Kcb kc3=(Kcb)iter.next();if(kc3.getKch().equals(kcb.getKch()return ERROR

30、;list.add(new KcDaoImp().getOneKc(kcb.getKch(); /如果沒找到,就添加到集合中xs3.setKcs(list);xsDao.update(xs3);return SUCCESS;成功頁(yè)面selectKc_success.jsp,代碼如下:你已經(jīng)成功選擇該課程!失敗頁(yè)面selectKc_fail.jsp,代碼如下:你已經(jīng)選擇該課程,請(qǐng)不要重復(fù)選取!部署運(yùn)行程序,登錄、單擊“所有課程信息”,單擊課程信息表格(如圖5.12所示)中某門課右邊的“選修”鏈接,如圖5.13所示(這里以選302號(hào)“軟件工程”課為例演示),后臺(tái)就會(huì)判斷該用戶是否已經(jīng)選修了該門課,如果已經(jīng)選修就會(huì)提示用戶已選,不要重復(fù)選?。蝗绻麤]有選修,就會(huì)提示用戶選修成功。然后再查看個(gè)人選課情況,會(huì)多出剛剛選修的課程信息,如圖5.14所示。(4)退選課程)退選課程退選操作很簡(jiǎn)單,只要把該學(xué)生的這個(gè)課程從Set中remove就行了。對(duì)應(yīng)的Action配置如下:/deleteKc_success.jsp對(duì)應(yīng)XsAction類中的處理方法,代碼

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論