溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JSF如何通過URL來傳遞參數(shù)

發(fā)布時間:2021-11-22 14:28:08 來源:億速云 閱讀:159 作者:小新 欄目:編程語言

小編給大家分享一下JSF如何通過URL來傳遞參數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

當(dāng)初看上JSF,是因為看中了幾個好處:

1、獲取或顯示表單數(shù)據(jù)時用相同的EL即可,JSF之前的EL只能get不能set;

2、MyFaces實現(xiàn)里面有很多很“炫”的組件,例如下拉菜單,樹型控件,日期選擇控件等等,使用極其方便。

于是就在一個小項目中使用JSF開發(fā),用著就發(fā)現(xiàn)其實這個東西也帶來了很多比以前更麻煩的地方,就拿很常見的數(shù)據(jù)庫操作——查詢、修改、插入、刪除來說明使用JSF來實現(xiàn)有什么麻煩:

1)查詢。對于小數(shù)據(jù)量,用一個dataTable就什么都搞定了??墒谴髷?shù)據(jù)量分頁就比較麻煩了,因為dataTable的分頁是把所有數(shù)據(jù)都取出來然后再一頁頁顯示,而大數(shù)據(jù)量下一般是要看哪一頁就取哪一頁。網(wǎng)上有個通用的分頁存儲過程,只要把一系列參數(shù)(頁碼,排序依據(jù),每頁大小等)傳給它,就能獲得某一頁的數(shù)據(jù)。如果直接通過URL來傳遞參數(shù),服務(wù)器根據(jù)參數(shù)來調(diào)用存儲過程,是很方便的事情。可是JSF卻不通過URL來傳遞參數(shù)了,整個頁面處理的過程也比較復(fù)雜,沒有以前那樣直觀。有人改了一下dataModel的實現(xiàn)方式,使它每次只取一頁的數(shù)據(jù),效果是達(dá)到了,但要跳到某一頁,卻只能點鏈接,不能通過輸入URL來到達(dá)了(也就是不能把某一頁添加到收藏夾里了)。

這兩天做了一些試驗,在JSF里還是可以通過URL來傳遞參數(shù)的,在Backing Bean里可以通過ValueBinding的getValue取得 URL參數(shù),然后根據(jù)參數(shù)來從數(shù)據(jù)庫中取得相應(yīng)的內(nèi)容,生成某個對象的bean,再在頁面上顯示出來。不過這樣一來,似乎就跟servlet差不多了。
如果可以通過配置來設(shè)定表單提交是get方式還是post方式就好了??墒悄壳耙宦芍荒躳ost,這樣造成的后果除了不能收藏,不能刷新(會提示是否重新提交數(shù)據(jù))之外,還會使瀏覽器的后退功能失效。

2)修改。在datatable中把數(shù)據(jù)顯示出來后,可以每一行加一個commanButton,在它的action method中調(diào)用dataModel的getRowData()方法來得到該行的數(shù)據(jù),把數(shù)據(jù)保存在一個request范圍的bean里面,再轉(zhuǎn)向到另一個頁面通過可編輯表單來顯示該bean的內(nèi)容,在那里就可以修改、提交了。由于是使用了forward方式轉(zhuǎn)向,所以url顯示的頁面還是數(shù)據(jù)顯示的那個頁面,只要一刷新,就又回到數(shù)據(jù)顯示那一頁而不是修改那一頁了;如果不想修改,按一下瀏覽器的后退按鈕,雖然回到了數(shù)據(jù)顯示的那一頁,但上面的 commandButton已經(jīng)失效,例如點擊修改按鈕,沒有任何反應(yīng),必須把那一頁刷新一下再點才有效。

為了解決這個問題,我采用了URL來傳遞參數(shù)的方法。通過在URL中指定ID來說明要修改的是哪個對象,在修改頁面的backing bean的構(gòu)造函數(shù)中,讀取URL參數(shù)來獲得ID,然后通過查詢數(shù)據(jù)庫得到該對象的其他內(nèi)容,再顯示在頁面上。這樣就可以刷新,可以后退。

3)新增。新增跟修改可以用同一個頁面來顯示,只是commandButton對應(yīng)不同的action method,例如“修改”按鈕對應(yīng)的是update,“新增”按鈕對應(yīng)的是create,在兩個method里分別使用數(shù)據(jù)庫的update語句和 insert語句即可。新增的時候是沒有ID的,修改的時候則已經(jīng)有了ID。

4)刪除。在顯示數(shù)據(jù)的dataTable里,每行可以添加一個commandButton,在它的action method里,讀取該行數(shù)據(jù),得到ID后執(zhí)行SQL的DELETE語句即可,比較簡單。

無論是做什么,都離不開三個東西:頁面,配置文件,Backing Bean。頁面是表現(xiàn)層的東西,負(fù)責(zé)把頁面上的東西與Backing Bean聯(lián)系起來。配置文件則指定在頁面上使用的Backing Bean的名字、類、使用范圍,還有導(dǎo)航規(guī)則(Navigation Rules)。Backing Bean就是程序的邏輯部分了。即使實現(xiàn)最簡單的功能,例如顯示某個變量的值,這三個東西都是必不可少的。

修改頁面的時候,雖然不用重啟服務(wù)器,但必須在新的session里才能看出效果來,最簡單的辦法就是把瀏覽器關(guān)掉,打開一個新的,查看結(jié)果。修改了配置文件和backing bean 就必須重啟服務(wù)器了。所以調(diào)試JSF是很麻煩的。 

以上是“JSF如何通過URL來傳遞參數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI