javascript
JSF:在正确的阶段进行验证(了解生命周期)
嗨,大家好!
盡管標題強調驗證一詞,但本文實際上是關于JSF生命周期的。 那是因為我相信,真正了解生命周期的最簡單方法之一就是通過做出我們一直在做的事情:驗證用戶輸入。
總的來說,理解所謂的JSF生命周期是使初級開發人員與眾不同的地方,初級開發人員主要復制并粘貼他們看到的所有內容,而高級開發人員則可以在面對不常見的情況而不會損害代碼質量的同時“貼上翅膀” 。
通常,當我面試某人聲稱自己擁有JSF的經驗并且似乎不了解其生命周期時,我認為這是一個不好的信號:)
總覽
如果您曾經讀過一本關于JSF的書,那么您可能已經看過以下圖片:
此圖顯示了生命周期中的所有階段。 關于我們對本文感興趣的內容,其中三個對我們最有用: 流程驗證 , 更新模型值和調用應用程序 。
讓我們假設一個假設的應用程序在其中注冊用戶。 在其中,我們將詢問用戶的姓名和年齡:
為了“處理”上面的表單,我們可能需要兩個工件:一個接受請求的Managed Bean和一個表示正在注冊的Person的實體對象:
證實
直截了當地,讓我們假設我們有一個要求,說明“ age”字段不能接收負值。 完全有道理,因為沒有人可以擁有“ -32”歲。 (我們還假設使用javascript是沒有問題的。在這樣的簡單驗證中,javascript就可以了。但是請允許我繼續使用這個。):)
然后,我們剩下兩種主要方法來驗證“年齡”字段:
我堅持使用“不推薦”和“推薦”這兩個詞來強調,在過程驗證階段之外驗證用戶輸入不是犯罪。 我們經常面臨無法實現“幸福之路”的情況。 犯罪是在做事的時候根本不知道發生了什么!
接下來是解釋。
不像這樣
我歸類為“不推薦”的方法是在“ save()”方法所包含的邏輯中驗證托管Bean中的“ age”字段。 當用戶點擊在“提交”,JSF生命周期踢,并調用“保存()”的調用應用程序相法右(注意這是在處理驗證階段之后 ):
為了了解為什么這可能是不好的,我們需要了解在每個JSF生命周期階段中發生的事情,并且還要記住Invoke Application階段發生在 Process Validation和Update Model Values之后 。 概括地說,這意味著僅在Person對象已經通過JSF生命周期更新了其“ age”屬性后 ,才調用“ save()”方法:
查看上圖,您可能已經注意到,當調用我們的“ save()”方法時,JSF生命周期已經在域類Person對象的“ age”屬性中設置了不一致的值。 那是個問題嗎?
是的,可能是。 由于我們的域類大多數時候都是由JPA管理的,因此,像這樣的無效值可能最終會在沒有我們意識到的情況下進入數據庫。 根據我的個人經驗,我得出的結論是,使用“擴展持久性上下文”(即跨越多個請求/響應周期的JPA上下文)時,此類錯誤更為常見。 如今,這通常是通過使用“對話上下文”來完成的,例如CDI中或在已故的JBoss Seam中。
現在我們在說
理想情況下,我們應該使用JSF Validator驗證輸入。 注意,這并不一定意味著只為驗證邏輯創建一個單獨的類,而是意味著我們必須在正確的階段 ( 流程驗證)觸發驗證 :
就像我說的那樣,無論如何進行驗證,主要要注意的是在正確的階段進行驗證。 還有幾種驗證輸入的方法,例如Bean Validation 。
就這樣
希望你們喜歡。 評論和問題可以留在下面。 直到下次!
翻譯自: https://www.javacodegeeks.com/2015/03/jsf-validation-at-the-right-phase-understanding-the-life-cycle.html
總結
以上是生活随笔為你收集整理的JSF:在正确的阶段进行验证(了解生命周期)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 躬耕是什么意思(三国时期诸葛亮真的曾躬耕
- 下一篇: 鲁大师提示主板驱动需要升级鲁大师提示主板