Struts2 值棧機制中,OGNL 三種特殊符號各司其職,掌握它們是高效開發的關鍵。
# 前綴。實際上 # 等價於 ActionContext.getContext()persons.{? #this.age > 20} 篩選年齡大於 20 的元素#{ 'foo1':'bar1', 'foo2':'bar2' }當標籤屬性類型為字符串時,% 強制計算 OGNL 表達式值而非按字面量處理。
<!-- 構建 Map 放入值棧 -->
<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
<p>直接取值:<s:property value="#foobar['foo1']" /></p>
<p>不使用 %:<s:url value="#foobar['foo1']" /> <!-- 輸出字面字符串 --></p>
<p>使用 %:<s:url value="%{#foobar['foo1']}" /> <!-- 輸出解析後的值 'bar1' --></p>
key=Welcome, ${username} 在頁面顯示時解析變量<result name="success">/user/${userId}/profile</result> 動態構建結果路徑| 符號 | 核心作用 | 典型場景 |
|---|---|---|
# |
非根對象訪問、集合操作、Map 構造 | #session.user、list.{? #this.active}、#{k:v} |
% |
字符串屬性中強制求值 | <s:url value="%{actionName}" /> |
$ |
配置/資源文件中變量插值 | struts.xml、messages.properties |
記憶口訣:# 找對象、% 求值、$ 填模板。