有关struts中DispatchAction的用法小结

   今天刚刚看了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
相关文章
相关标签/搜索