關於Struts2中的“#”,“%”和“$”

在Struts2中使用OGNL時,經常會用到$,%,#這三個符號
1.“#”符號
“#”符號的主要作用如下:
(1)用於訪問保存在Strack Context中的對象。當一個對象object保存在Strack Context中時,必須使用“#object”的形式去訪問。
“#”符號相當於ActionContext.getContext()。因此,#session.msg相當於調用ActionContext.getContext().getSession().getAttribute("msg")。
(2)用於過濾和投影集合。例如:
#users.{?#this.age>30}
#users.{?#this.age>30}.{age}[0]
(3)用來構造Map對象集合。例如:
<s:radio list="#{1:'男',2:'女'}" label="性別" name="gender"/>中利用“#”構造了一個具有兩個Map對象的集合,並利用該集合充當了radio標籤的數據源。
2.“%”符號
在爲Struts2標籤的屬性賦值時,除了使用常量外,還可以用OGNL表達式。通常,可以利用“%{”和“}”將OGNL表達式括起來,例如:
<s:property value="%{title}">
告訴Struts2將title的值作爲value屬性的值。
在不發生歧義的情況下,“%”通常可以省略。因此,上面的語句等價於:
<s:property value="title">
但是,下面的語句利用set標籤定義了一個對象Page,並將其保存在Stack Context中,然後在a標籤中將Page取出,計算下一頁的地址,此時就不能省略“%”,即不能將“%{#page-1}”寫成“{#page-1}”
<s:set name="Page" value="10" id="page"></s:set>
<s:a href="postDetail.action?page=%{#page-1}">上一頁</s:a>
3."$"運算符
(1)在配置文件中使用OGNL表達式訪問Action屬性。例如:
<action name="login" class="org.shops.action.LoginAction">
<result>/${folder}/welcome.jsp/</result>
</action>
(2)當在國際化資源文件中構造的消息文本中使用了OGNL表達式時,需要將OGNL表達式用“${”和“}”括起來。例如:
message=歡迎${username}登錄系統!


注:關於什麼時候用“#”和什麼時候不用“#”
值棧中的對象的不使用#,非值棧中的對象使用#
如果你不理解值棧的作用,簡單點理解:當前action,或者處於action鏈中的action所擁有的屬性,並且爲該屬性提供了getter和setter方法,那麼在jsp中就不需要使用#,
除此之外需要使用#,那麼從這裏你就可以知道action的屬性如果提供了getter和setter方法,那麼這些屬性值就會放置到值棧中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章