今天剛剛看了DispatchAction覺得這個東西有點意思,所以就寫點東西,通過它的名字我想應該可以明白它的作用了,用於分發的Action,主要的好處是把一些功能類似的Action放到一個Action中,通過傳入的不同參數來覺得執行哪個操作.
DispatchAction類是一個抽象類,它實現了父類(Action)的execute()方法,所以它的子類就不用來實現這個方法了,只需要專注與實際操作的方法,
1.首先要一個DispatchAction的子類,它含有一些方法,login,logout,method1,
package examples;
package examples;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.actions.*;
public class AccountAction extends DispatchAction {
public ActionForward login(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些Login的邏輯
return mapping.findForward("success");
}
public ActionForward logout(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些Logout的邏輯
return mapping.findForward("success1");
}
public ActionForward method1(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些method1的邏輯
return mapping.findForward("success");
}
}
一定要注意在DispatchAction中你想執行的操作,都必須要有統一的參數 (ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response), 是一個規定.
2.接下來是配置struts-config.xml
<action path="/login" type="examples.AccountAction"
name="logonForm"
scope="request"
parameter="action"
input="/pages/dispatch1.jsp">
<forward name="success" path="/pages/success.jsp" />
</action>
<action path="/logout" type="examples.AccountAction"
name="logonForm"
scope="request"
parameter="action"
input="/pages/dispatch1.jsp">
<forward name="success1" path="/pages/success1.jsp" />
</action>
這里需要注意的就是parameter屬性的值,因為這個值要和頁面傳來的參數對應.
3.再來看看JSP頁 pages/dispatch1.jsp
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:link href="/DispathActionTest/login.do?action=login">login</html:link><br>
<html:link href="/DispathActionTest/logout.do?action=logout">logout</html:link>
這里要注意幾點,首先 ?后面的KEY要和struts-config.xml中的parameter相同,還有它的VALUE要是你在 action的一個方法名字,這里方法名為login, 那么在程序運行時就是調用login的操作,如果是logout,那程序就調用logout的操作.
補充:我們當然可以通過定義一個類似於<html:hidden property="operAt"/>的變量,只要對該變量賦上對應DispatchAction中的方法的值來確定我們要調用的業務方法。然而筆者不提倡用Struts標簽來定義這樣的隱含的變量,因為Struts標簽為動態標簽,它可能需要在FormBean中定義該屬性的get和set方法,而在parameter中定義的值不需要在FormBean當中定義get和set方法。筆者建議用html的標准標簽<input> 來定義該隱藏變量。因為該標簽為靜態標簽,如果我們改用Struts標簽的話可能導致頁面出錯。
DispatchAction類是一個抽象類,它實現了父類(Action)的execute()方法,所以它的子類就不用來實現這個方法了,只需要專注與實際操作的方法,
1.首先要一個DispatchAction的子類,它含有一些方法,login,logout,method1,
package examples;
package examples;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.actions.*;
public class AccountAction extends DispatchAction {
public ActionForward login(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些Login的邏輯
return mapping.findForward("success");
}
public ActionForward logout(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些Logout的邏輯
return mapping.findForward("success1");
}
public ActionForward method1(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 進行一些method1的邏輯
return mapping.findForward("success");
}
}
一定要注意在DispatchAction中你想執行的操作,都必須要有統一的參數 (ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response), 是一個規定.
2.接下來是配置struts-config.xml
<action path="/login" type="examples.AccountAction"
name="logonForm"
scope="request"
parameter="action"
input="/pages/dispatch1.jsp">
<forward name="success" path="/pages/success.jsp" />
</action>
<action path="/logout" type="examples.AccountAction"
name="logonForm"
scope="request"
parameter="action"
input="/pages/dispatch1.jsp">
<forward name="success1" path="/pages/success1.jsp" />
</action>
這里需要注意的就是parameter屬性的值,因為這個值要和頁面傳來的參數對應.
3.再來看看JSP頁 pages/dispatch1.jsp
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:link href="/DispathActionTest/login.do?action=login">login</html:link><br>
<html:link href="/DispathActionTest/logout.do?action=logout">logout</html:link>
這里要注意幾點,首先 ?后面的KEY要和struts-config.xml中的parameter相同,還有它的VALUE要是你在 action的一個方法名字,這里方法名為login, 那么在程序運行時就是調用login的操作,如果是logout,那程序就調用logout的操作.
補充:我們當然可以通過定義一個類似於<html:hidden property="operAt"/>的變量,只要對該變量賦上對應DispatchAction中的方法的值來確定我們要調用的業務方法。然而筆者不提倡用Struts標簽來定義這樣的隱含的變量,因為Struts標簽為動態標簽,它可能需要在FormBean中定義該屬性的get和set方法,而在parameter中定義的值不需要在FormBean當中定義get和set方法。筆者建議用html的標准標簽<input> 來定義該隱藏變量。因為該標簽為靜態標簽,如果我們改用Struts標簽的話可能導致頁面出錯。
- 頂
- 0
- 踩
