首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Struts 2 Result 配置、通配符映射與 OGNL 表達式完整指南

     編輯:Java 綜合教學

Struts 2 Result 配置詳解

<result> 是 <action> 的子元素,代表 Action 方法執行後的導向目的地。一個 Action 可配置多個 result,name 屬性對應 Action 回傳值,type 指定響應類型。

常見 Result Type

  • dispatcher(預設):請求轉發,同 Servlet Forward。
  • redirect:重導向,瀏覽器發新請求。
  • redirectAction:重導向到另一個 Action,可攜帶參數。
  • chain:Action 鏈轉發,在同一請求內傳遞 Action 狀態。
<!-- redirectAction 範例 -->
<result name="index" type="redirectAction">
  <param name="actionName">testAction</param>
  <param name="namespace">/atguigu</param>
</result>

<!-- chain 範例 -->
<result name="test" type="chain">
  <param name="actionName">testAction</param>
  <param name="namespace">/atguigu</param>
</result>

通配符映射機制

利用 *、** 簡化相似映射:

  • 無通配符的映射優先匹配。
  • {1}, {2} 引用被 * 匹配的子字串;{0} 匹配完整 URI。
  • * 不匹配 /,需用 **;轉義用 \。

動態方法調用 (DMI)

URL 格式:ActionName!methodName.action。預設關閉,需在 struts.xml 開啟:

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

OGNL 與值堆

OGNL (Object-Graph Navigation Language) 是 Struts 2 存取值堆的語言。值堆分兩部分:

  • Object Stack (CompoundRoot):儲存 Action 實例等對象,棧頂為 [0]。
  • Map Stack (OgnlContext):包含 request、session、application 等 Map。

常用 OGNL 語法

場景語法範例
存取棧頂屬性message 或 [0].message
存取指定層級[1].property
呼叫方法[0].repeat(3, 'Hello')
存取靜態欄位/方法@java.util.Calendar@DECEMBER、@com.util.Tool@now()
集合/陣列存取colors[0]、list.size、map['key']
建立 List/Map{'Red','Blue'}、#{key1:'val1', key2:'val2'}

EL 整合

Struts 2 以 StrutsRequestWrapper 包裝 Request,重寫 getAttribute() 先查值堆,再查原生域,故 JSP 可直接用 ${fieldName} 取值。

聲明式例外處理

在 <action> 或 <global-results> 內配置 <exception-mapping>:

<exception-mapping exception="java.sql.SQLException" result="dbError" />

ExceptionMappingInterceptor 捕獲例外後,會向值堆放入 exception 與 exceptionStack,視圖可用 <s:property value="exception.message" /> 顯示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved