版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1
8.1 用Struts優(yōu)化完善寵物分類展現(xiàn)頁面
8.2 用struts實(shí)現(xiàn)寵物查找功能
8.3 struts深入
第8章–用Struts完善寵物商城的catalog模塊
2學(xué)習(xí)目標(biāo)通過本章的學(xué)習(xí),你可以:鞏固并深入Struts
完成任務(wù)838.1用Struts優(yōu)化完善寵物分類展現(xiàn)頁面
8.1.1
定義為品種列表頁面準(zhǔn)備數(shù)據(jù)的Action
8.1.2 定義相關(guān)ActionForm
8.1.3 配置ActionForm和Action
8.1.4 修改項(xiàng)目中對Category.jsp的頁面請求為對Action的請求
8.1.5
相應(yīng)修改Category.jsp的代碼
4對頁面的請求和對Action的請求
請求就是超鏈接的href屬性和表單<Form>的action屬性對應(yīng)的值
對頁面的請求,就是這些值是一個(gè)JSP或HTML頁面,點(diǎn)擊超鏈接或提交表單,將會(huì)引起相關(guān)頁面的調(diào)用,即顯示頁面對Action的請求就是這些值是Action的別名,即Struts核心配置文件中action配置項(xiàng)中path的值,點(diǎn)擊超鏈接或提交表單,將會(huì)調(diào)用Action進(jìn)行處理,然后再轉(zhuǎn)向相關(guān)頁面5品種列表頁面Category.jsp中無法去除的Java腳本
見黑色字體部分……<jsp:useBeanid="petstore"class="com.sziit.petstore.domain.logic.PetStoreImpl"></jsp:useBean><%StringcatID=request.getParameter("catid");Categorycategory=petstore.getCategory(catID);ListproList=petstore.getProductListByCategory(catID);%>68.1.1定義為品種列表頁面準(zhǔn)備數(shù)據(jù)的Action
以為品種列表頁面準(zhǔn)備數(shù)據(jù)的Action(取名為ViewCategoryAction)為例說明重寫execute方法實(shí)現(xiàn)功能:準(zhǔn)備好category和proList的值保存到session或request中,以便Category.jsp使用EL顯示相關(guān)數(shù)據(jù),去除Java代碼通過execute的參數(shù)request獲得請求參數(shù)的值,代碼:StringcatID=request.getParameter("catid");通過PetStoreFacade接口訪問數(shù)據(jù)庫獲得category和proList的值,代碼:PetStoreFacadepetstore=newPetStoreImpl();Categorycategory=petstore.getCategory(catID);ListproList=petstore.getProductListByCategory(catID);78.1.1定義為品種列表頁面準(zhǔn)備數(shù)據(jù)的Action(續(xù))處理一個(gè)請求,Struts有對應(yīng)的三個(gè)部分將category和proList保存到session中,使得可用EL表達(dá)式操作category和proList。代碼:request.getSession().setAttribute("category",category);request.getSession().setAttribute("proList",proList);88.1.2定義相關(guān)ActionForm
由于品種列表頁面不需要大量請求數(shù)據(jù),不用通過ActionForm定義相關(guān)屬性和方法傳遞數(shù)據(jù),所以只要定義一個(gè)非常簡單的ActionForm:BaseActionForm,只要繼承ActionForm即可
publicclassBaseActionFormextendsActionForm{}
注意:不能直接使用org.apache.struts.action.ActionForm作為與自定義的Action相關(guān)聯(lián)的ActionForm,即在Struts-config.xml中配置的ActionForm必須自己定義
98.1.3配置ActionForm和Action
可以在Struts-config.xml中直接配置也可以考慮根據(jù)不同的功能或模塊將struts-config.xml分解為不同的文件,以方便后期的開發(fā)和維護(hù),需要做以下工作:按照功能將struts-config.xml劃分為幾個(gè)小文件,建議:將應(yīng)用程序公共的全局配置放到struts-config.xml中;將相同功能的配置放到同一個(gè)配置文件中,如:struts-cart.xml,struts-catalog.xml,struts-account.xml分別表示購物車、寵物分類展現(xiàn)、用戶管理部分的配置文件108.1.3配置ActionForm和Action(續(xù))在struts-catalog.xml中配置BaseActionForm和ViewCategoryAction,代碼:<form-beans><form-beanname="defaultFormBean"type="com.sziit.petstore.struts.BaseActionForm"/></form-beans><action-mappings><actionpath="/shop/viewCategory"input="/catalog/Main.jsp"name="defaultFormBean"scope="session"type="com.sziit.petstore.struts.ViewCategoryAction"> <forwardname="success"path="/catalog/Category.jsp"/></action></action-mappings>118.1.3配置ActionForm和Action(續(xù))配置web.xml引用多個(gè)struts配置文件<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-catalog.xml</param-value></init-param>128.1.4修改項(xiàng)目中對Category.jsp的頁面請求為對Action的請求
修改項(xiàng)目中對Category.jsp的頁面請求,改為對ViewCategoryAction的請求,即將原來href值為Category.jsp的鏈接的href值改為/shop/viewCategory.shtml主要有Main.jsp中的相關(guān)鏈接和Product.jsp中的“返回上一級菜單”鏈接138.1.5相應(yīng)修改Category.jsp的代碼
由于ViewCategoryAction已經(jīng)將Category.jsp頁面顯示需要的數(shù)據(jù)保存到session的屬性中,所以Category.jsp頁面的代碼簡化很多將對jsp頁面的請求也改為對Action的請求<%@pagelanguage="java"contentType="text/html;charset=GB2312"%><%@includefile="mon/IncludeTop.jsp"%><divid="content"><divid="BackLink"><Ahref="index.shtml">返回主頁</A></div>148.1.5相應(yīng)修改Category.jsp的代碼(續(xù))<divid="Catalog"><h2>${}</h2><table><tr><th>商品編號(hào)</th><th>名稱</th></tr><c:forEachitems="${proList}"var="obj"varStatus="status"><tr><td><Ahref="viewProduct.shtml?productid=${ductid}">${ductid}</A></td><td>${}</td></tr></c:forEach></table></div></div><%@includefile="mon/IncludeBottom.jsp"%>158.2用struts實(shí)現(xiàn)寵物查找功能
8.2.1 寵物查找界面及實(shí)現(xiàn)思路
8.2.2 定義封裝查找關(guān)鍵字的ActionForm
8.2.3 定義處理查找功能的Action并進(jìn)行配置
8.2.4
在PetStoreFacade和PetStoreImpl中增加支持查找的方法
8.2.5
在ProductDAO中增加支持查找的方法
8.2.6
創(chuàng)建查找結(jié)果顯示頁面SearchProducts.jsp
8.2.7
創(chuàng)建查找失敗頁面noPet.jsp
168.2.1寵物查找界面及實(shí)現(xiàn)思路
使用寵物商城的查找功能查找功能178.2.1寵物查找界面及實(shí)現(xiàn)思路
(續(xù))查找結(jié)果頁面188.2.1寵物查找界面及實(shí)現(xiàn)思路
(續(xù))點(diǎn)擊寵物圖片、名稱或編號(hào)的鏈接后打開的頁面198.2.1寵物查找界面及實(shí)現(xiàn)思路
(續(xù))查找失敗頁面
208.2.1寵物查找界面及實(shí)現(xiàn)思路
(續(xù))用Struts實(shí)現(xiàn)查找功能定義相關(guān)ActionForm和Action并配置在PetStoreFacade、PetStoreImpl和類productDAO中增加支持查找的方法創(chuàng)建查找結(jié)果頁面和查找失敗頁面共用error.jsp在沒有錄入關(guān)鍵字時(shí)給出出錯(cuò)提示218.2.2定義封裝查找關(guān)鍵字的ActionForm
命名為SearchActionForm
定義keyword屬性創(chuàng)建getKeyword方法創(chuàng)建setKeyword方法,在該方法中將參數(shù)進(jìn)行轉(zhuǎn)碼后在為keyword賦值,以支持錄入的中文。代碼:publicvoidsetKeyword(Stringkeyword)throwsUnsupportedEncodingException{
this.keyword=newString(keyword.getBytes("ISO-8859-1")); //this.keyword=keyword;}在struts-catalog.xml中配置SearchActionForm,即在struts-catalog.xml中增加如下代碼:<form-beanname="searchForm"type="com.sziit.petstore.struts.SearchActionForm"/>228.2.2定義封裝查找關(guān)鍵字的ActionForm
(續(xù))因?yàn)橹挥幸粋€(gè)有效表單域(keyword),所以也可以不專門定義一個(gè)ActionForm,而是共用寵物展現(xiàn)模塊的BaseActionForm,在Action中對keyword進(jìn)行轉(zhuǎn)碼238.2.3定義處理查找功能的Action并進(jìn)行配置命名為SearchProductsAction重寫execute方法實(shí)現(xiàn)查找功能
對用戶輸入合法性進(jìn)行檢查,代碼:if(keyword==null||keyword.trim().length()<1){
如果不合法,共用在用戶登錄定義的error.jsp全局出錯(cuò)提示頁面,代碼:request.setAttribute("message","查找關(guān)鍵字不能為空!");returnmapping.findForward("failure");調(diào)用PetStoreFacade的searchProductList方法完成查找,該方法將在后面定義,代碼:PetStoreFacadepetstore=newnewPetStoreImpl();
Listlist=petstore.searchProductList(keyword);
如果沒查找,轉(zhuǎn)向”noPet”對應(yīng)頁面,代碼:if(list.size()==0)target="noPet";248.2.3定義處理查找功能的Action并進(jìn)行配置(續(xù))將查詢結(jié)果保存到session的屬性searchProductList中,代碼:request.getSession().setAttribute("searchProductList",list);在struts-catalog.xml中配置SearchProductsAction,即在struts-catalog.xml中增加如下代碼:
<actionpath="/shop/searchProducts"name="searchForm"scope="session"type="com.sziit.petstore.struts.SearchProductsAction"><forwardname="success"path="/catalog/seachProducts.jsp"/><forwardname="noPet"path="/catalog/noPet.jsp"/></action>258.2.4在PetStoreFacade和PetStoreImpl中增加支持查找的方法
在PetStoreFacade中增加定義searchProductList方法,代碼:publicListsearchProductList(Stringkeyword);在PetStoreFacade的實(shí)現(xiàn)類PetStoreImpl中增加searchProductList方法,代碼:
publicListsearchProductList(Stringkeyword){ ductDao.searchProductList(keyword); }
268.2.5在ProductDAO中增加支持查找的方法
在productDAO中增加searchProductList方法:通過使用java.util.Scanner類將輸入的多個(gè)關(guān)鍵字用空格分離到s中,通過s.next()可以順序取出每個(gè)關(guān)鍵字形成HQL語句如果只輸入一個(gè)關(guān)鍵字如“魚”,只需要執(zhí)行if語句,形成“selectdistinctpfromProductp,Categorycwherec.catid=p.categoryand(UPPER()like‘%魚%’ORUPPER(p.descn)like‘%魚%’ORUPPER()like‘%魚%’)”這樣的查詢語句。如果有多個(gè)關(guān)鍵字如“魚狗”,還得繼續(xù)執(zhí)行while語句,形成“selectdistinctpfromProductp,Categorycwherec.catid=p.categoryand(UPPER()like'%魚%'ORUPPER(p.descn)like'%魚%'ORUPPER()like'%魚%'ORUPPER()like'%狗%'ORUPPER(p.descn)like'%狗%'ORUPPER()like'%狗%')”這樣的查詢語句278.2.5在ProductDAO中增加支持查找的方法(續(xù))保證中文查找正確MySQL數(shù)據(jù)庫安裝語言選擇gbk創(chuàng)建數(shù)據(jù)庫和表的默認(rèn)字符集也選擇gbk,如:CREATEDATABASEIFNOTEXISTSPETSTOREdefaultcharsetgbk;createtablecategory( catidvarchar(10)notnull, namevarchar(80)binarynull, descnvarchar(255)null, constraintpk_categoryprimarykey(catid))defaultcharset=gbk;
需要進(jìn)行查找的字段定義為binary屬性,如namevarchar(80)binary,288.2.6創(chuàng)建查找結(jié)果顯示頁面SearchProducts.jsp
SearchProducts.jsp的實(shí)現(xiàn)與Category.jsp很相似對于Category.jsp,對應(yīng)品種已經(jīng)保存到proList中,在表格中顯示即可對于SearchProducts.jsp,查詢結(jié)果已經(jīng)保存到searchProductList
中,在表格中顯示即可298.2.7創(chuàng)建查找失敗頁面noPet.jsp主要顯示:
查找失敗,目前無匹配的寵物!的結(jié)果提示,代碼:<divid="Catalog"><h2>查找失敗,目前無匹配的寵物!</h2></div>
返回主頁超鏈接,代碼:<divid="BackLink"><Ahref="index.shtml">
返回主頁</A></div>308.3struts深入
8.3.1 使用struts標(biāo)簽保留查詢條件
8.3.2 在ActionForm中進(jìn)行驗(yàn)證
318.3.1使用struts標(biāo)簽保留查詢條件
查找功能的缺陷:點(diǎn)擊查找按鈕后,用戶以前錄入的查找關(guān)鍵字被清空,如果用戶下次要查找的關(guān)鍵字與上次的類似,用戶必須重新錄入;而且用戶也希望在查詢結(jié)果上看到自己錄入的查詢條件通過Struts標(biāo)簽可以很方便地實(shí)現(xiàn)保留查詢條件32使用Struts標(biāo)簽的步驟:使用taglib指令引入Struts標(biāo)簽,對于保留查詢條件,則在IncludeTop.jsp文件中增加如下代碼:<%@tagliburi=""prefix="bean"%><%@tagliburi=""prefix="html"%><%@tagliburi=""prefix="logic"%>使用struts的html標(biāo)簽取代HTML標(biāo)記使用html:form替換普通的<form>標(biāo)記,8.3.1使用struts標(biāo)簽保留查詢條件(續(xù))338.3.1使用struts標(biāo)簽保留查詢條件(續(xù))使用struts的html標(biāo)簽取代HTML標(biāo)記使用html:form替換普通的<form>標(biāo)記使用html:sumbit生成一個(gè)submit按鈕html:text標(biāo)簽用于生成<inputtype=“text”…>代碼,即一個(gè)文本框,html:text標(biāo)簽可以通過property屬性和ActionForm(這里是SearchActionForm)中的值綁定,如果剛剛查詢過“魚”,最終發(fā)送到瀏覽器的HTML代碼是“<inputtype=”text“name=”keyword“value=”魚“>”,即查詢條件被保存下來。<divid="Search"><html:formmethod="post"action="/shop/searchProducts"><html:textproperty="keyword"/> <html:submitstyleClass="btn">查找</html:submit></html:form></d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院護(hù)工保密協(xié)議書范本(3篇)
- 舞蹈新生班主題課程設(shè)計(jì)
- 藝術(shù)與設(shè)計(jì)課程設(shè)計(jì)案例
- 自然探索團(tuán)隊(duì)課程設(shè)計(jì)
- 簡易課程設(shè)計(jì)
- 英語詞匯班課程設(shè)計(jì)
- 正太分布課程設(shè)計(jì)
- 綠色蟈蟈課程設(shè)計(jì)
- 財(cái)務(wù)制度匯編
- 《刑罰的體系與種類》課件
- 鄧州市龍理鄉(xiāng)第一初級中學(xué)-2025年春節(jié)寒假跨學(xué)科主題實(shí)踐作業(yè)模板【課件】
- 2024年中央經(jīng)濟(jì)工作會(huì)議精神解讀
- 2023-2024學(xué)年廣東省深圳市福田區(qū)八年級(上)期末歷史試卷
- 公司安全事故隱患內(nèi)部舉報(bào)、報(bào)告獎(jiǎng)勵(lì)制度
- 歷史常識(shí)單選題100道及答案解析
- 2024年陜西榆林市神木市公共服務(wù)輔助人員招聘775人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 福建省泉州市2023-2024學(xué)年高一上學(xué)期期末質(zhì)檢英語試題(解析版)
- GA 2139-2024警用防暴臂盾
- 2024年首都機(jī)場集團(tuán)招聘筆試參考題庫附帶答案詳解
- GB 6944-2012 危險(xiǎn)貨物分類和品名編號(hào)(高清版)
- 建筑制圖學(xué)習(xí)基礎(chǔ)實(shí)訓(xùn)報(bào)告
評論
0/150
提交評論