【正文】
l u s e r B e a n : U s e r B e a n u s e r d a o : U s e r D a og e t N u s e r s ( )f i n d N u s e r s ( )u s e r D e l e t e ( A c t i o n E v e n t )g e t S e s s i o n V a l u e ( S t r i n g )u s e r D e l e t e B y I D ( i n t ) 圖 刪除普通用戶(hù)時(shí)序圖 普通用戶(hù)列表由 PrimeFaces 的 dataTable 盛放,普通用戶(hù)集合 nusers 由 UserDao 類(lèi)的 public ListUserBean findNusers()方法返回。 每條記錄后都有一 個(gè)刪除按鈕,點(diǎn)擊刪除按鈕會(huì)觸發(fā) UserBean 類(lèi)的 public void userDelete(ActionEvent event)方法,該方法中首先通過(guò) session 得到登錄的管理員的身份代碼,若不是 1 則消息提示 “沒(méi)有刪除權(quán)限 ”,若是 1 則調(diào)用 UserDao 類(lèi)的 public void userDeleteByID(int userId)方法,參數(shù) userId 通過(guò)刪除按鈕下的 f:attribute傳入。該功能實(shí)質(zhì)就是對(duì)數(shù)據(jù)庫(kù)的用戶(hù)列表記錄進(jìn)行對(duì)號(hào)刪除操作。 時(shí)序圖如圖 所示。 b. 添加管理員 在后臺(tái)管理處添 加的管理員身份代碼為 2,初始密碼為 888888,自行登錄后可修改個(gè)人名稱(chēng)和密碼。使用 h:outputText盛放身份代碼值和密碼值,這兩項(xiàng)是定死的不可輸入。管理員名稱(chēng)使用 h:inputText盛放并與 綁定。點(diǎn)擊添加按鈕后觸發(fā) UserBean類(lèi)的 public void managerInsert()方法,該方法中嵌套調(diào)用 UserDao 類(lèi)的 public int managerInsert(String userName,int ustatus,String passWord,int uscore)方法, userName 參數(shù)由前臺(tái)被 userBean 綁定的控件傳入,參數(shù) ustatus、 passWord、 uscore 直接賦值。 c. 刪除管理員 同普通用戶(hù)的刪除功能相似。不同的是點(diǎn)擊刪除按鈕后觸發(fā) UserBean 類(lèi)的 public void managerDelete(ActionEvent event)方法,該方法中同樣對(duì)管理員身份代碼進(jìn)行檢測(cè)。 d. 個(gè)人信息修改 點(diǎn)擊個(gè)人修改功能項(xiàng)進(jìn)入已登錄管理員信息列表。該信息集合由 dataGrid 盛放,其綁定值為 。 loguser 是一個(gè)集合,盛放了一個(gè)已登錄的管理員對(duì)象( UserBean類(lèi)型)。 loguser 由 UserDao類(lèi)的 public ListUserBean findLogUsers(int userId)方法返回。在管理員登錄的方法 public String findMUers( String userName, String 第 21 頁(yè) 共 45 頁(yè) passWord)中已將管理員編號(hào)放入 session 中,因此通過(guò) getSessionValue()方法可得到userId。點(diǎn)擊修改按鈕觸發(fā) UserBean 類(lèi)的 public void logedUserUpdate()方法,在其中嵌套調(diào)用 UserDao 類(lèi)的 public int logUserUpdate(String userName,String passWord,int userId)方法。 userName 和 passWord 的 set()方法中已調(diào)用 setSessionValue()方法,所以通過(guò) session 可得到他們的值,也是頁(yè)面?zhèn)鱽?lái)的新值。 時(shí)序圖如圖 所示。 m a n a g e r d e t a i l . x h t m l : x h t m l u s e r B e a n : U s e r B e a n u s e r d a o : U s e r D a og e t L o g u s e r ( )g e t S e s s i o n V a l u e ( S t r i n g )f i n d L o g U s e r s ( i n t )l o g e d U s e r U p d a t e ( )g e t S e s s i o n V a l u e ( S t r i n g )l o g U s e r U p d a t e ( S t r i n g , S t r i n g , i n t ) 圖 修改個(gè)人信息時(shí)序圖 禮品管理功能 禮品的管理包括添加禮品和刪除禮品。在后臺(tái),禮品信息由 managedBean: giftBean管理。 a. 添加禮品 同添加電影功能相似,禮品的添加包括添加禮品名稱(chēng)( giftName),禮品實(shí)體圖( giftPicture),禮品簡(jiǎn)介( giftDescribe),所需積分( requiredScore)這些數(shù)據(jù)項(xiàng)。 giftName,giftDescribe 和 requiredScore 直接和前臺(tái)頁(yè)面的 h:inputText綁定。 giftPicture 通過(guò)上傳文件得到(文件上傳的具體實(shí)現(xiàn)見(jiàn) )。點(diǎn)擊添加按鈕觸發(fā) GiftBean 類(lèi)的 public void giftInsert() 方法,此方法中嵌套調(diào)用 GiftDao 類(lèi)的 public int giftsInsert(String giftName,String giftPicture,String giftDescribe,int requiredScore )方法。 b. 刪除禮品 禮品刪除功能同電影刪除功能相似,不同的是此刪除功能沒(méi)有權(quán)限限制,點(diǎn)擊刪除按鈕后觸發(fā) GiftBean 類(lèi)的 public void giftDelete(ActionEvent event)方法,在此方法中嵌 第 22 頁(yè) 共 45 頁(yè) 套調(diào)用 GiftDao 類(lèi)的 public void giftDeleteByID(int giftId)方法。參數(shù) giftId 通過(guò)前臺(tái)刪除按鈕下的 f:attribute得到。 主要界面設(shè)計(jì) 主頁(yè)設(shè)計(jì) 主頁(yè)( )的頁(yè)面布局使用 PrimeFaces的 layout實(shí)現(xiàn),設(shè)置 layout的fullpage屬性值為 true。本系統(tǒng)主頁(yè)的 layout將頁(yè)面分成北( north)、西( west)、中( center)三個(gè)模塊。且主頁(yè)作為后繼頁(yè)面的模板。模板使用詳細(xì)實(shí)現(xiàn)見(jiàn) 。 a. north north 中盛放系統(tǒng)的工具條,該工具條 使用 PrimeFaces 的 dock 實(shí)現(xiàn)。 p:dock的position 屬性值為 top,表示這個(gè) dock 要放置在頁(yè)面的頂部。在 p:dock中添加p:menueitem,表示屬于此 dock 的某一個(gè)元素,設(shè)置其 value 屬性值為本系統(tǒng)功能的相應(yīng)名稱(chēng),表示鼠標(biāo)聚焦于此時(shí)顯示的文字內(nèi)容;設(shè)置 icon 屬性值為想要使用的圖標(biāo)路徑,表示該功能按鈕的圖標(biāo);設(shè)置 url 屬性值為將要跳轉(zhuǎn)的頁(yè)面名稱(chēng)。 b. west west 模塊兒展示電影的分類(lèi)集合。使用 PrimeFaces 的 dataGrid 盛放分類(lèi)集合allCategory, allCategory 由 AllfCatrgoryDao 類(lèi)的 public ListAllfCategoryBean findAllfCategory()方法返回。頁(yè)面上每個(gè)分類(lèi)名稱(chēng)都是一個(gè)鏈接,點(diǎn)擊某分類(lèi)名稱(chēng),通過(guò)該鏈接下的 f:attribute將分類(lèi)編號(hào)傳入后臺(tái),該鏈接與 filmBean. showByCategory 綁定, public ListFilmBean showByCategory(ActionEvent event)方法返回根據(jù)分類(lèi)選出的電影列表集合 showByCatg,該方法 中調(diào) 用 FilmDao 類(lèi)下的 public ListFilmBean showByCatg(int catgId),將從前臺(tái)得到的分類(lèi)編號(hào)傳入。點(diǎn)擊分類(lèi)鏈接后跳轉(zhuǎn)與分類(lèi)名稱(chēng)相對(duì)應(yīng)的電影列表的新頁(yè)面,根據(jù)分類(lèi)選出的電影列表 showByCatg 由 PrimeFaces 的dataGrid 控件盛放,設(shè)置 dataGrid 的 paginator 屬性值為 true實(shí)現(xiàn)分頁(yè)功能 。每個(gè)電影都可以查看詳情,查看按鈕下的 f:attribute將選中電影的電影編號(hào)傳入后臺(tái),后臺(tái)根據(jù)此編號(hào)從數(shù)據(jù)庫(kù)中讀出對(duì)應(yīng)的電影數(shù)據(jù),將該數(shù)據(jù)放入集合 中,供將要跳轉(zhuǎn)到的電影詳情頁(yè)面使用。 c. center center 模塊展示最新上線電影。最新上線電影集合 nfilms( FilmBean 的一個(gè)屬性)由 FilmDao 類(lèi)的 public ListFilmBean findNewFilm()方法返回。在前臺(tái)頁(yè)面中使用dataGrid 盛放該集合。設(shè)置 p:dataGrid var=“nf” value=“{}”的 columns屬性值為 4,即想要顯示的數(shù)據(jù)列為 4 列, p:dataGrid中嵌套一個(gè) p:panel,即一個(gè)panel 占一個(gè)數(shù)據(jù)列,設(shè)置 panel 的 header 屬性值為 {}, p:pannel中嵌套一個(gè) p:panelGrid,設(shè)置其 columns 屬性值為 1,即數(shù)據(jù)滿(mǎn)一列則換行,在此 panelGrid 第 23 頁(yè) 共 45 頁(yè) 中順次嵌套 p:graphicImage value=/materials/images/{}(展示電影海報(bào))、 h:outputText value={}{}{}(展示電影分 類(lèi))、 p:mandLink actionListener={} action=, mandLink 被點(diǎn)擊后觸發(fā) FilmBean 類(lèi)的 public ListFilmBean selectedFilm(ActionEvent event)方法,之后跳轉(zhuǎn)到電影詳情頁(yè)面,在該方法中嵌套調(diào)用FilmDao 類(lèi)下的 public ListFilmBean selectById(int fId)方法,參數(shù) fId 通過(guò)p:mandLink下的 f:attribute得到,此方法的返回值付給 FilmBean 的集合selectedFilmInfor,它是被選中電影的詳細(xì)信息集合,在電影詳情頁(yè)面用到。 電影詳情頁(yè)面同樣使用 dataGrid 盛放 selectedFilmInfor 集合。 電影詳情頁(yè)面設(shè)計(jì) 電影詳情( )頁(yè)面使用 做模板。該頁(yè)面分為兩個(gè)區(qū),每個(gè)區(qū)域都用 p:fieldset 包裹。第一個(gè)區(qū)域是電影詳情區(qū),展示電影詳細(xì)信息(集合selectedFilmInfor),得分情況,可對(duì)電影進(jìn)行打分;第二個(gè)區(qū)域是展示影評(píng)區(qū),也可對(duì)電影進(jìn)行評(píng)價(jià)。打分和影評(píng)功能上面以做過(guò)描述。 a. 用戶(hù)詳細(xì)信息頁(yè)面設(shè)計(jì) 用戶(hù)登錄成功后跳轉(zhuǎn)到用戶(hù)詳情頁(yè)面( userdetail,xhtml)。該頁(yè)面使用 做模板,分為三個(gè)區(qū)域,每個(gè)區(qū)域使用 p:fieldset 盛放。 第一個(gè)區(qū)域展示用戶(hù)名和當(dāng)前積分,是一個(gè)由 dataGrid 盛放的集合 loguser,此集合由 UserDao 類(lèi)的 public ListUserBean findLogUsers(int userId)方法返回, 參數(shù) userId 通過(guò) session 得到。 第二個(gè)區(qū)域是用戶(hù)兌換的禮品清單 selectedug,是 GiftBean 類(lèi)的一個(gè)集合,它由GiftDao 類(lèi)下的 public ListGiftBean selectedUserGifts(int userId)返回。該方法實(shí)質(zhì)是根據(jù)用戶(hù)編號(hào)從數(shù)據(jù)庫(kù)的禮品兌換單表中選出對(duì)應(yīng)用戶(hù)的所有禮品。 第三個(gè)區(qū)域是用戶(hù)訂單列表,可對(duì)訂單進(jìn)行撤銷(xiāo)操作。 b. 后臺(tái)管理頁(yè)面設(shè)計(jì) 后臺(tái)管理的所有頁(yè)面都是用后臺(tái)管理主頁(yè)( )做模板,管理主頁(yè)的布局使用 p:layout 實(shí)現(xiàn),分為 north、 west、 center、 east 四個(gè)模塊。 north 模塊顯示 “影視棧管理系統(tǒng) ”的字樣; west 顯示后臺(tái)管理的功能列表,使用 p:panelMenu 實(shí)現(xiàn);center 是可編輯的模塊,顯示各功能的具體操作頁(yè)面; east 顯示一個(gè) flash,使用 p:media盛放,對(duì) p:media嵌套 f:param name=wmode value=transparent/可使 flash 透明。 關(guān)鍵問(wèn)題及解決方案 a. 模板的引用 在模板頁(yè)面中,將可編輯的模塊用 ui:insert name=模塊名稱(chēng) /ui:insert包裹住即 第 24 頁(yè) 共 45 頁(yè) 可。在后繼頁(yè)面中使用此模板,只需寫(xiě)要編輯模塊的代碼即可,將要編輯的模塊代碼用 ui:position template=/模板頁(yè)面文件全名 ui:define name=待編輯模塊名 代碼部分 /ui:define /ui:position包裹住即可。 b. 編碼問(wèn)題 從前臺(tái)頁(yè)面向后臺(tái)傳參數(shù)時(shí),若不能傳中文字符,則在數(shù)據(jù)庫(kù)連接字符串中的數(shù)據(jù)庫(kù)名稱(chēng)后面加上 ?characterEncoding=uft8即可。 c. 界面的背景問(wèn)題 若 把界面的背景圖加在 body的 background屬性中,則會(huì)因?yàn)闉g覽器不支持可修改擴(kuò)展名的圖片的問(wèn)題導(dǎo)致背景圖片無(wú)