標籤:style blog java 使用 檔案 os
Structs2 Result學習筆記(一)簡單介紹問題一
<struts> <constant name="struts.devMode" value="true" /> <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="r1"> <result type="dispatcher">/r1.jsp</result> </action> <action name="r2"> <result type="redirect">/r2.jsp</result> </action> <action name="r3"> <result type="chain">r1</result> </action> <action name="r4"> <result type="redirectAction">r2</result> </action> </package></struts>
dispatcher - forward運用伺服器跳轉 伺服器跳轉 顯示action
redirect - 重新導向跳轉到jsp
chain 伺服器跳轉
redirectAction
問題二 chain跳轉 -> 從一個action,跳轉至另外一個包裡面的action的方法:
<package name="public" extends="struts-default"> <!-- Chain creatAccount to login, using the default parameter --> <action name="createAccount" class="..."> <result type="chain">login</result> </action> <action name="login" class="..."> <!-- Chain to another namespace --> <result type="chain"> <param name="actionName">dashboard</param> <param name="namespace">/secure</param> </result> </action></package><package name="secure" extends="struts-default" namespace="/secure"> <action name="dashboard" class="..."> <result>dashboard.jsp</result> </action></package>
通過例子可以看出,是通過為chain配置actionName參數和namespace參數;
具體執行個體參見struts-2.1.6/docs/docs/chain-result.html裡面的文檔說明。
問題三;全域Result
//前端htm<body>Result類型<ol><li><a href="user/user?type=1">返回success</a></li><li><a href="user/user?type=2">返回error</a></li><li><a href="user/user?type=3">返回global result</a></li><li><a href="admin/admin">admin,繼承user包</a></li></ol></body>
//struct.xml<struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <global-results> <result name="mainpage">/main.jsp</result> </global-results> <action name="index"> <result>/index.jsp</result> </action> <action name="user" class="com.struts2.user.action.UserAction"> <result>/user_success.jsp</result> <result name="error">/user_error.jsp</result> </action> </package> <package name="admin" namespace="/admin" extends="user"> <action name="admin" class="com.struts2.user.action.AdminAction"> <result>/admin.jsp</result> </action> </package></struts>
//類包//AdminActionpackage com.struts2.user.action;import com.opensymphony.xwork2.ActionSupport;public class AdminAction extends ActionSupport {@Overridepublic String execute() throws Exception {return "mainpage";}}//UserActionpackage com.struts2.user.action;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private int type;public int getType() {return type;}public void setType(int type) {this.type = type;}@Overridepublic String execute() throws Exception {if(type == 1) return "success";else if (type == 2) return "error";else return "mainpage";}}分析1
<package name="user" namespace="/user" extends="struts-default"> <global-results> <result name="mainpage">/main.jsp</result> </global-results> <action name="index"> <result>/index.jsp</result> </action> <action name="user" class="com.struts2.user.action.UserAction"> <result>/user_success.jsp</result> <result name="error">/user_error.jsp</result> </action> </package>
這段設定檔中,result 為success時,調用user_success.jsp,result為error時,調用
/user_error.jsp,其餘所有的情況都使用result為mainpage的配置,可以共用這個結果集。
分析二
<package name="admin" namespace="/admin" extends="user"> <action name="admin" class="com.struts2.user.action.AdminAction"> <result>/admin.jsp</result> </action> </package>
extends的作用是從另外一個包裡面繼承配置資訊,工作中使用對項目進行分模組處理,每個模組都有公用的配置資訊,這樣可以將公用配置資訊定義為<global-results>,然後被各個模組繼承,簡化處理。和c++/java中的繼承關係好像啊!
問題四:struct-default解析源檔案在ReferencedLibraries/WebRoot/WEB-INF/lib/struts2-core-2.1.6.jar/struct-default.xml
<package name="struts-default" abstract="true">
預設定義了攔截器
<default-interceptor-ref name="defaultStack"/><default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
結論:配置很複雜,使用不需改。