<result> 是 <action> 的子元素,代表 Action 方法執行後的導向目的地。一個 Action 可配置多個 result,name 屬性對應 Action 回傳值,type 指定響應類型。
<!-- 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。* 不匹配 /,需用 **;轉義用 \。URL 格式:ActionName!methodName.action。預設關閉,需在 struts.xml 開啟:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
OGNL (Object-Graph Navigation Language) 是 Struts 2 存取值堆的語言。值堆分兩部分:
[0]。| 場景 | 語法範例 |
|---|---|
| 存取棧頂屬性 | 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'} |
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" /> 顯示。