使用OGNL表達(dá)式獲取
* appliaction : #appliaction.username 或者 #application['username'] ,相當(dāng)于appliaction.getAttribute("username");
* session : #session.username 或者 #session['username'],相當(dāng)于session。getAttribute("username");
* request : #request.username 或者 #request['username'],相當(dāng)于request.getAttribute("username");
* parameters: #parameters.username 或者 #parameters['username'],相當(dāng)于 request.getParameter("username")
* attr : 按照pageContext--->request---->session--->application 順序訪問(wèn)屬性
使用OGNL動(dòng)態(tài)獲取值:
* 如果是屬性: 直接寫(xiě)屬性的名字
* 如果是變量: 需要在變量的名字加個(gè) # 的前綴。
關(guān)于struts2標(biāo)簽和OGNL的幾個(gè)注意事項(xiàng):
* struts2 標(biāo)簽都支持動(dòng)態(tài)數(shù)據(jù)訪問(wèn),標(biāo)簽的屬性都可使用ONGL表達(dá)式。struts 2 標(biāo)簽的屬性都具有類型,
* 可以簡(jiǎn)單的分為兩類:字符創(chuàng)類型和對(duì)象類型。<s:url>為字符串 ,<s:set> <s:property>為Object類型
* 對(duì)于字符串的屬性,如果要訪問(wèn)動(dòng)態(tài)數(shù)據(jù),必須使用 %{...} 這樣的語(yǔ)法,否則直接看成字符串常量。
* 對(duì)于Object的屬性,將直接看成OGNL表達(dá)式求解,如果需要對(duì)對(duì)象類型的屬性指定字符串常量,則必須在這個(gè)字符串常量外加上一對(duì)單引號(hào)或者%{'constant String'}這樣的語(yǔ)法
* 如果對(duì)對(duì)象的屬性使用了%{....}的語(yǔ)法,則語(yǔ)法會(huì)被忽略,而直接把內(nèi)容當(dāng)中OGNL 表達(dá)式求解。eg:<s:property value="%{#myurl}" /> 和<s:property value="#url" />作用是相同的。
* 經(jīng)驗(yàn):如果分不清一個(gè)屬性的值的類型是不是字符創(chuàng)類型的,可以直接加上%{....}
OGNL 表達(dá)式 和 EL 表達(dá)式的區(qū)別:
* 在struts2 中,OGNL表達(dá)式必須和struts2標(biāo)簽配合使用,而不能單獨(dú)使用,而EL表達(dá)式可以單獨(dú)使用,不能和struts2標(biāo)簽配合使用。
* ActionContext 是struts2 中 OGNL 表達(dá)式的上下文,該上下文中有多個(gè)Map對(duì)象,eg:application , session等,包括ValueStack 。但是ValueStack是跟對(duì)象,可以直接訪問(wèn),其他對(duì)象訪問(wèn)需要加 # 前綴。