JSF帶來了什嗎?

來源:互聯網
上載者:User
當初看上JSF,是因為看中了幾個好處:
1、擷取或顯示表單資料時用相同的EL即可,JSF之前的EL只能get不能set;
2、MyFaces實現裡面有很多很“炫”的組件,例如下拉式功能表,樹型控制項,日期選擇控制項等等,使用極其方便。
於是就在一個小項目中使用JSF開發,用著就發現其實這個東西也帶來了很多比以前更麻煩的地方,就拿很常見的資料庫操作——查詢、修改、插入、刪除來說明使用JSF來實現有什麼麻煩:
1、查詢。對於小資料量,用一個dataTable就什麼都搞定了。可是大資料量分頁就比較麻煩了,因為dataTable的分頁是把所有資料都取出來然後再一頁頁顯示,而大資料量下一般是要看哪一頁就取哪一頁。網上有個通用的分頁預存程序,只要把一系列參數(頁碼,排序依據,每頁大小等)傳給它,就能獲得某一頁的資料。如果直接通過URL來傳遞那些參數,伺服器根據參數來調用預存程序,是很方便的事情。可是JSF卻不通過URL來傳遞參數了,整個頁面處理的過程也比較複雜,沒有以前那樣直觀。有人改了一下dataModel的實現方式,使它每次只取一頁的資料,效果是達到了,但要跳到某一頁,卻只能點連結,不能通過輸入URL來到達了(也就是不能把某一頁添加到收藏夾裡了)。這兩天做了一些實驗,在jsf裡還是可以通過URL傳遞參數的,在Backing Bean裡可以通過ValueBinding的getValue取得URL參數,然後根據參數來從資料庫中取得相應的內容,產生某個對象的bean,再在頁面上顯示出來。不過這樣一來,似乎就跟servlet差不多了。
如果可以通過配置來設定表單提交是get方式還是post方式就好了。可是目前一律只能post,這樣造成的後果除了不能收藏,不能重新整理(會提示是否重新提交資料)之外,還會使瀏覽器的後退功能失效。

2、修改。在datatable中把資料顯示出來後,可以每一行加一個commanButton,在它的action method中調用dataModel的getRowData()方法來得到該行的資料,把資料儲存在一個request範圍的bean裡面,再轉向到另一個頁面通過可編輯表單來顯示該bean的內容,在那裡就可以修改、提交了。由於是使用了forward方式轉向,所以url顯示的頁面還是資料顯示的那個頁面,只要一重新整理,就又回到資料顯示那一頁而不是修改那一頁了;如果不想修改,按一下瀏覽器的後退按鈕,雖然回到了資料顯示的那一頁,但上面的commandButton已經失效,例如點擊修改按鈕,沒有任何反應,必須把那一頁重新整理一下再點才有效。為瞭解決這個問題,我採用了URL傳遞參數的方法。通過在URL中指定ID來說明要修改的是哪個對象,在修改頁面的backing bean的建構函式中,讀取URL參數來獲得ID,然後通過查詢資料庫得到該對象的其他內容,再顯示在頁面上。這樣就可以重新整理,可以後退。

3、新增。新增跟修改可以用同一個頁面來顯示,只是commandButton對應不同的action method,例如“修改”按鈕對應的是update,“新增”按鈕對應的是create,在兩個method裡分別使用資料庫的update語句和insert語句即可。新增的時候是沒有ID的,修改的時候則已經有了ID。

4、刪除。在顯示資料的dataTable裡,每行可以添加一個commandButton,在它的action method裡,讀取該行資料,得到ID後執行SQL的DELETE語句即可,比較簡單。

無論是做什麼,都離不開三個東西:頁面,設定檔,Backing Bean。頁面是表現層的東西,負責把頁面上的東西與Backing Bean聯絡起來。設定檔則指定在頁面上使用的Backing Bean的名字、類、使用範圍,還有導航規則(Navigation Rules)。Backing Bean就是程式的邏輯部分了。即使實現最簡單的功能,例如顯示某個變數的值,這三個東西都是必不可少的。
修改頁面的時候,雖然不用重啟伺服器,但必須在新的session裡才能看出效果來,最簡單的辦法就是把瀏覽器關掉,開啟一個新的,查看結果。修改了設定檔和backing bean 就必須重啟伺服器了。所以調試JSF是很麻煩的。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.