有关struts中DispatchAction的用法小结

时间:2022-12-01 23:52:29
   今天刚刚看了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标签的话可能导致页面出错。

 
0