小編給大家分享一下JSF如何通過(guò)URL來(lái)傳遞參數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
為崗巴等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及崗巴網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、崗巴網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
當(dāng)初看上JSF,是因?yàn)榭粗辛藥讉€(gè)好處:
1、獲取或顯示表單數(shù)據(jù)時(shí)用相同的EL即可,JSF之前的EL只能get不能set;
2、MyFaces實(shí)現(xiàn)里面有很多很“炫”的組件,例如下拉菜單,樹(shù)型控件,日期選擇控件等等,使用極其方便。
于是就在一個(gè)小項(xiàng)目中使用JSF開(kāi)發(fā),用著就發(fā)現(xiàn)其實(shí)這個(gè)東西也帶來(lái)了很多比以前更麻煩的地方,就拿很常見(jiàn)的數(shù)據(jù)庫(kù)操作——查詢(xún)、修改、插入、刪除來(lái)說(shuō)明使用JSF來(lái)實(shí)現(xiàn)有什么麻煩:
1)查詢(xún)。對(duì)于小數(shù)據(jù)量,用一個(gè)dataTable就什么都搞定了??墒谴髷?shù)據(jù)量分頁(yè)就比較麻煩了,因?yàn)閐ataTable的分頁(yè)是把所有數(shù)據(jù)都取出來(lái)然后再一頁(yè)頁(yè)顯示,而大數(shù)據(jù)量下一般是要看哪一頁(yè)就取哪一頁(yè)。網(wǎng)上有個(gè)通用的分頁(yè)存儲(chǔ)過(guò)程,只要把一系列參數(shù)(頁(yè)碼,排序依據(jù),每頁(yè)大小等)傳給它,就能獲得某一頁(yè)的數(shù)據(jù)。如果直接通過(guò)URL來(lái)傳遞參數(shù),服務(wù)器根據(jù)參數(shù)來(lái)調(diào)用存儲(chǔ)過(guò)程,是很方便的事情。可是JSF卻不通過(guò)URL來(lái)傳遞參數(shù)了,整個(gè)頁(yè)面處理的過(guò)程也比較復(fù)雜,沒(méi)有以前那樣直觀(guān)。有人改了一下dataModel的實(shí)現(xiàn)方式,使它每次只取一頁(yè)的數(shù)據(jù),效果是達(dá)到了,但要跳到某一頁(yè),卻只能點(diǎn)鏈接,不能通過(guò)輸入U(xiǎn)RL來(lái)到達(dá)了(也就是不能把某一頁(yè)添加到收藏夾里了)。
這兩天做了一些試驗(yàn),在JSF里還是可以通過(guò)URL來(lái)傳遞參數(shù)的,在Backing Bean里可以通過(guò)ValueBinding的getValue取得 URL參數(shù),然后根據(jù)參數(shù)來(lái)從數(shù)據(jù)庫(kù)中取得相應(yīng)的內(nèi)容,生成某個(gè)對(duì)象的bean,再在頁(yè)面上顯示出來(lái)。不過(guò)這樣一來(lái),似乎就跟servlet差不多了。
如果可以通過(guò)配置來(lái)設(shè)定表單提交是get方式還是post方式就好了??墒悄壳耙宦芍荒躳ost,這樣造成的后果除了不能收藏,不能刷新(會(huì)提示是否重新提交數(shù)據(jù))之外,還會(huì)使瀏覽器的后退功能失效。
2)修改。在datatable中把數(shù)據(jù)顯示出來(lái)后,可以每一行加一個(gè)commanButton,在它的action method中調(diào)用dataModel的getRowData()方法來(lái)得到該行的數(shù)據(jù),把數(shù)據(jù)保存在一個(gè)request范圍的bean里面,再轉(zhuǎn)向到另一個(gè)頁(yè)面通過(guò)可編輯表單來(lái)顯示該bean的內(nèi)容,在那里就可以修改、提交了。由于是使用了forward方式轉(zhuǎn)向,所以u(píng)rl顯示的頁(yè)面還是數(shù)據(jù)顯示的那個(gè)頁(yè)面,只要一刷新,就又回到數(shù)據(jù)顯示那一頁(yè)而不是修改那一頁(yè)了;如果不想修改,按一下瀏覽器的后退按鈕,雖然回到了數(shù)據(jù)顯示的那一頁(yè),但上面的 commandButton已經(jīng)失效,例如點(diǎn)擊修改按鈕,沒(méi)有任何反應(yīng),必須把那一頁(yè)刷新一下再點(diǎn)才有效。
為了解決這個(gè)問(wèn)題,我采用了URL來(lái)傳遞參數(shù)的方法。通過(guò)在URL中指定ID來(lái)說(shuō)明要修改的是哪個(gè)對(duì)象,在修改頁(yè)面的backing bean的構(gòu)造函數(shù)中,讀取URL參數(shù)來(lái)獲得ID,然后通過(guò)查詢(xún)數(shù)據(jù)庫(kù)得到該對(duì)象的其他內(nèi)容,再顯示在頁(yè)面上。這樣就可以刷新,可以后退。
3)新增。新增跟修改可以用同一個(gè)頁(yè)面來(lái)顯示,只是commandButton對(duì)應(yīng)不同的action method,例如“修改”按鈕對(duì)應(yīng)的是update,“新增”按鈕對(duì)應(yīng)的是create,在兩個(gè)method里分別使用數(shù)據(jù)庫(kù)的update語(yǔ)句和 insert語(yǔ)句即可。新增的時(shí)候是沒(méi)有ID的,修改的時(shí)候則已經(jīng)有了ID。
4)刪除。在顯示數(shù)據(jù)的dataTable里,每行可以添加一個(gè)commandButton,在它的action method里,讀取該行數(shù)據(jù),得到ID后執(zhí)行SQL的DELETE語(yǔ)句即可,比較簡(jiǎn)單。
無(wú)論是做什么,都離不開(kāi)三個(gè)東西:頁(yè)面,配置文件,Backing Bean。頁(yè)面是表現(xiàn)層的東西,負(fù)責(zé)把頁(yè)面上的東西與Backing Bean聯(lián)系起來(lái)。配置文件則指定在頁(yè)面上使用的Backing Bean的名字、類(lèi)、使用范圍,還有導(dǎo)航規(guī)則(Navigation Rules)。Backing Bean就是程序的邏輯部分了。即使實(shí)現(xiàn)最簡(jiǎn)單的功能,例如顯示某個(gè)變量的值,這三個(gè)東西都是必不可少的。
修改頁(yè)面的時(shí)候,雖然不用重啟服務(wù)器,但必須在新的session里才能看出效果來(lái),最簡(jiǎn)單的辦法就是把瀏覽器關(guān)掉,打開(kāi)一個(gè)新的,查看結(jié)果。修改了配置文件和backing bean 就必須重啟服務(wù)器了。所以調(diào)試JSF是很麻煩的。
以上是“JSF如何通過(guò)URL來(lái)傳遞參數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章標(biāo)題:JSF如何通過(guò)URL來(lái)傳遞參數(shù)
URL網(wǎng)址:http://jinyejixie.com/article26/ghoscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、搜索引擎優(yōu)化、企業(yè)建站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、微信小程序、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)