OGNL是Object-Graph(圖) Navigation(導(dǎo)航) Language的縮寫,它是一種功能強(qiáng)大的表達(dá)式語言(Expression Language,簡稱為EL),通過它簡單一致的表達(dá)式語法,可以存取對象的任意屬性,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型轉(zhuǎn)化等功能。它使用相同的表達(dá)式去存取對象的屬性。
WebOGNL是一種構(gòu)建以servlet為基礎(chǔ)的組件化應(yīng)用的web表現(xiàn)層框架,它的模板語言建立在OGNL表達(dá)式的基礎(chǔ)上,具有別的web層框架不能匹敵的適應(yīng)性。
OGNL可以讓我們用非常簡單的表達(dá)式訪問對象層,例如,當(dāng)前環(huán)境的根對象為user1,則表達(dá)式person.address[0].province
可以訪問到user1的person屬性的第一個address的province屬性。
這種功能是模板語言的一個重要補(bǔ)充,象jsp2.0,velocity,jelly等等,都有類似的功能,但是ognl比它們完善得多,而且以一個獨(dú)立的lib出現(xiàn),方便我們構(gòu)建自己的框架。
webwork2和現(xiàn)在的Struts2.x中使用OGNL取代原來的EL來做界面數(shù)據(jù)綁定,所謂界面數(shù)據(jù)綁定,也就是把界面元素(例如一個textfield,hidden)和對象層某個類的某個屬性綁定在一起,修改和顯示自動同步。
和struts1.x的formbean相比,這樣做的好處非常明顯:在webwork中不需要為每個頁面專門寫formbean,可以直接利用對象層的對象。例如在對象設(shè)計中,我們的User和Person是分開的,而一個注冊用戶界面需要填寫兩者的內(nèi)容,在webwork中,就可以保持后臺的對象結(jié)構(gòu),把屬于用戶屬性的界面元素用user.person.xxx綁定,把屬于賬號屬性的界面元素用user.xxx綁定。