【正文】
)方法。4. 調(diào)用 SingleMaterialBillDAOImplHibernate 類(lèi)的 saveSingleMaterialBill()方法。225. 調(diào)用 HibernateTemplate 類(lèi)的 save()方法。6. 返回“添加成功 ”信息。 修改成本信息列表時(shí)序圖如圖 36 所示,該圖為修改成本明細(xì)信息時(shí)序圖。C o s t _ A d d . j s pU S E R S i n g l e M a t e r i a l P r o c e s s I m p l2 . s u b m i t S i n g l e M a t e r i a l B i l l ( )3 . d e l l S i n g l e M a t e r i a l B i l l ( )S i n g l e M a t e r i a l B i l l D A O I m p l H i b e rn a t e4 . d e l S i n g l e M a t e r i a l B i l l ( )H i b e r n a t e T e m p l a t e5 . d e l e t e ( )6 . r e t u r n7 . c r e a t e S i n g l e M a t e r i a l B i l l ( )1 . e d i t ( )8 . s a v e S i n g l e M a t e r i a l B i l l ( )9 . s a v e ( )1 0 . r e t u r n e d i t s u c c e s s m e s s a g e圖 36 修改成本明細(xì)信息時(shí)序圖具體步驟如下:1. 用戶(hù)單擊成本信息列表右側(cè)的編輯按鈕時(shí),Struts 的 ActionForward 通過(guò) struts 的配置轉(zhuǎn)發(fā)至 頁(yè)面。2. 用戶(hù)將成本信息修改完成后單擊提交按鈕時(shí),Struts 會(huì)通過(guò) 的配置調(diào)用 CostDetailAction 類(lèi)的 submitSingleMaterialBill ()方法。3. CostDetailAction 類(lèi)的 submitSingleMaterialBill()首先調(diào)用 SingleMaterialProcessImpl類(lèi)的 dellSingleMaterialBill ()方法刪除原先的成本數(shù)據(jù)。4. 調(diào)用 SingleMaterialBillDAOImplHibernate 類(lèi)的 delSingleMaterialBill()方法。5. 調(diào)用 HibernateTemplate 類(lèi)的 delete()方法。6. 返回至 CostDetailAction 類(lèi)的 submitSingleMaterialBill()方法。7. CostDetailAction 類(lèi)的 submitSingleMaterialBill()然后調(diào)用 SingleMaterialProcessImpl類(lèi)的 createSingleMaterialBill ()方法添加修改后的成本數(shù)據(jù)。238. 調(diào)用 SingleMaterialBillDAOImplHibernate 類(lèi)的 saveSingleMaterialBill()方法。9. 調(diào)用 HibernateTemplate 類(lèi)的 save()方法。10. 返回“修改成功 ”信息。 刪除成本信息時(shí)序圖如圖 37 所示,該圖為刪除成本信息時(shí)序圖。C o s t _ M a . j s pU S E R S i n g l e M a t e r i a l P r o c e s s I m p l2 . d e l l ( )3 . d e l l S i n g l e M a t e r i a l B i l l ( )S i n g l e M a t e r i a l B i l l D A O I m p l H i b e rn a t e4 . d e l S i n g l e M a t e r i a l B i l l ( )H i b e r n a t e T e m p l a t e5 . d e l e t e ( )6 . r e t u r n d e l e t e s u c c e s s1 . d e l e t e ( )圖 37 刪除成本信息時(shí)序圖具體步驟如下:1. 用戶(hù)單擊成本維護(hù)界面右側(cè)的刪除按鈕時(shí),Struts 的 ActionForward 通過(guò) struts 的配置轉(zhuǎn)發(fā)至 頁(yè)面。2. Struts 會(huì)通過(guò) 的配置調(diào)用 CostDetailAction 類(lèi)的 dell ()方法。3. CostDetailAction 類(lèi)的 submitSingleMaterialBill()調(diào)用 SingleMaterialProcessImpl 類(lèi)的 dellSingleMaterialBill ()方法。4. 調(diào)用 SingleMaterialBillDAOImplHibernate 類(lèi)的 delSingleMaterialBill()方法。5. 調(diào)用 HibernateTemplate 類(lèi)的 delete()方法。6. 返回“刪除成功 ”信息。 查看成本明細(xì)信息列表時(shí)序圖如圖 38 所示,該圖為查看成本明細(xì)信息時(shí)序圖。24C o s t _ V i e w . j s pU S E R S i n g l e M a t e r i a l P r o c e s s I m p l2 . t o V i e w ( )3 . g e t S i n g l e M a t e r i a l B i l l B y I d ( )S i n g l e M a t e r i a l B i l l D A O I m p l H i b e rn a t e4 . g e t S i n g l e M a t e r i a l B i l l B y I d ( )H i b e r n a t e T e m p l a t e5 . f i n d ( )6 . r e t u r n S i n g l e M a t e r i a l B i l l1 . v i e w ( )圖 38 查看成本明細(xì)信息時(shí)序圖具體步驟如下:1. 用戶(hù)單擊成本信息列表上的編號(hào)超鏈接時(shí),Struts 的 ActionForward 通過(guò) struts 的配置轉(zhuǎn)發(fā)至 頁(yè)面。2. Struts 會(huì)通過(guò) 的配置調(diào)用 CostDetailAction 類(lèi)的 toView ()方法。3. CostDetailAction 類(lèi)的 toView()方法調(diào)用 SingleMaterialProcessImpl 類(lèi)的getSingleMaterialBillById ()方法。4. 調(diào)用 SingleMaterialBillDAOImplHibernate 類(lèi)的 getSingleMaterialBillById()方法。5. 調(diào)用 HibernateTemplate 類(lèi)的 find()方法。6. 查詢(xún)數(shù)據(jù)庫(kù),返回成本明細(xì)信息。25第四章 系統(tǒng)詳細(xì)設(shè)計(jì)與功能實(shí)現(xiàn) 系統(tǒng)項(xiàng)目的文件夾結(jié)構(gòu)在編寫(xiě)代碼之前,通常先將框架所需要的文件夾先創(chuàng)建出來(lái)(例如:創(chuàng)建各個(gè)框架層次用到的代碼文件分開(kāi)存放,如 bean、dao 等) ,這樣不但可以方便以后的開(kāi)發(fā)工作,也可以實(shí)現(xiàn)框架的規(guī)范化。在服飾企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表系統(tǒng)中,設(shè)計(jì)了如圖 所示的文件夾結(jié)構(gòu)圖。 圖 41 文件夾的架構(gòu)幾個(gè)重要的文件夾:(1)bean:用于存放各數(shù)據(jù)表所對(duì)應(yīng)的類(lèi)文件。(2)dao:用于存放各種操作數(shù)據(jù)庫(kù)的類(lèi)及接口文件。(3)exception:存放各種異常文件。(4)resources:存放幾種資源文件便于國(guó)際化。(5)service:存放解決業(yè)務(wù)邏輯的類(lèi)及接口文件。(6)struts:存放控制類(lèi) Action 和 ActionForm 類(lèi)文件。(7)util: 存放常用的 bean 文件,便于引用(8)WEBINF:該目錄用來(lái)存儲(chǔ)與 Web 應(yīng)用程序相關(guān)的元信息。這些資源可以被 Web 應(yīng)26用程序中的 Servlet 和 JSP 頁(yè)面訪(fǎng)問(wèn)到。在該目錄下一般存放下面這些內(nèi)容:1) classes 目錄:用來(lái)存放 Java 類(lèi)文件,包括被編譯后的 Servlet 文件等。此外,還可以存放一些配置文件,該目錄是 Web 應(yīng)用程序的上下文類(lèi)路徑。 Java 程序在尋找自身引用的其他類(lèi)文件時(shí),會(huì)搜索該目錄下的 Java 文件。2) lib 目錄:該目錄用來(lái)存放 Web 應(yīng)用程序中需要引用的庫(kù)文件,這些庫(kù)文件打包為 jar 文件。該目錄也是 Web 應(yīng)用程序的上下文類(lèi)路徑。 Java 程序在尋找自身引用的其他類(lèi)文件時(shí)也會(huì)搜索該目錄。3) 文件:該文件稱(chēng)為 Web 應(yīng)用程序部署描述符,是 Web 應(yīng)用程序的配置文件,用于在應(yīng)用程序開(kāi)發(fā)人員、部署人員和集成人員之間傳遞配置信息。Web 容器啟動(dòng)的時(shí)候,會(huì)使用該文件中的配置內(nèi)容來(lái)加載應(yīng)用程序。該文件中可以進(jìn)行如下配置:會(huì)話(huà)配置、Servlet 聲明、 Servlet 映射、過(guò)濾器定義與映射、錯(cuò)誤頁(yè)、標(biāo)記庫(kù)映射等。 成本管理模塊的具體實(shí)現(xiàn) 查詢(xún)成本信息列表功能的實(shí)現(xiàn)當(dāng)用戶(hù)登錄之后,點(diǎn)擊成本管理成本明細(xì)維護(hù),自動(dòng)查詢(xún)出該登錄用戶(hù)曾經(jīng)添加過(guò)的所有成本明細(xì)信息列表,分頁(yè)顯示每頁(yè)顯示 50 條記錄,如圖 42 所示。圖 42 成本明細(xì)維護(hù)界面用戶(hù)可以輸入編號(hào)、合同號(hào)、外銷(xiāo)地區(qū)、款號(hào)、審擬人以及交貨日期這六個(gè)查詢(xún)條件進(jìn)行查詢(xún)。例如輸入交貨日期為 20220513,單擊右邊的查詢(xún)按鈕,可以查詢(xún)出符合條件的成本信息列表。如圖 43 所示。27圖 43 查詢(xún)成本信息列表具體實(shí)現(xiàn)流程如下:登錄到服飾企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表系統(tǒng)后,點(diǎn)擊成本管理?成本明細(xì)維護(hù)超鏈接,其地址為 會(huì)到 配置文件中查找 path=”/costDetailAction”的 Action。action path=/costDetailAction name=costDetailForm scope=request type=ActionProxy parameter=method/由 type=””可見(jiàn)此處 Struts 使用了Spring 的代理模式。要想查找到對(duì)應(yīng)的 Action,則必須通過(guò)到 Spring 的配置文件 中查找,我們將成本管理相關(guān)的配置文件寫(xiě)到 config/ 中,然后在 通過(guò)import resource=”config/”/引用文件。在 中加入配置文件。bean name=/costDetailAction class= property name=purchaseBoref bean=purchaseBo//propertyproperty name=singleMaterialProcessref bean=singleMaterialProcess//property property name=orderProcessref bean=orderProcess//property/bean上段配置文件中,我們可以看到,bean 下有三個(gè) property 分別為purchaseBo、 singleMaterialProcess、orderProcess。 CostDetailAction 類(lèi)中有三個(gè)屬性變量purchaseBo、 singleMaterialProcess、orderProcess,通過(guò) bean 標(biāo)簽的子標(biāo)簽 property 來(lái)對(duì)這三個(gè)屬性變量進(jìn)行注入。注入的值來(lái)源于 property 標(biāo)簽的 ref 屬性,ref 屬性中的值是 配置文件中的 bean 的 id 值,以 singleMaterialProcess 為例,ref 中的值關(guān)聯(lián)如下 bean。bean id=singleMaterialProcess class=property name=transactionManagerref bean=transactionManager//propertyproperty name=targetref local=singleMaterialProcessTarget//propertyproperty name=transactionAttributes28propsprop key=get*PROPAGATION_REQUIRED,readOnly/propprop key=create*PROPAGATION_REQUIRED/prop/props/property/bean在 IOC 容器的幫助下,就可以實(shí)現(xiàn)松耦合,并且模塊之間是分離的,互相可以共享的。CostDetailAction 類(lèi)中可以直接使用這三個(gè)接口,而不需要實(shí)例化他們的實(shí)現(xiàn)類(lèi),再去使用它們。CostDetailAction 類(lèi)中,queryMa()方法用于顯示成本信息列表,核心代碼如下:public final ActionForward queryMa(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response){try{User ps = (User) ().getAttribute(USER)。().re