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