ActionForward

来源:互联网 发布:淘宝水弹枪哪家好 编辑:程序博客网 时间:2024/05/16 05:23

ActionForward是做什么的?

他是用来封装转发路径的。

在struts-config.xml中<forward name="error" path="/login.jsp"></forward>默认的是安转发处理,转发的特点:是使用同一个request,而重定向的url地址会改变,而转发的url地址是不变的。而且重定向使用的不是同一个request,等于又发送了一个请求,所以他的url地址会改变。在这想变为重定向,需要使用另一个属性:redirect="true",设置成true,就变成重定向了。<forward name="error" path="/login.jsp"></forward>在这是错误了转到登陆页面,所以应该使用重定向来实例。让地址也变到登陆的地址。

定义全局forward:

使用标签<global-forwards>来定义全局forward:

<global-forwards>
  <forward name="login" path="/login.jsp" redirect="true"/>
 </global-forwards>

这个标签要放在 <action-mappings>的上面:

</form-beans>
 
 <global-forwards>
  <forward name="login" path="/login.jsp" redirect="true"/>
 </global-forwards>
 
 <action-mappings>

全局forward是都可以访问的,但是当需要使用forward时,strues自动安就近原则来选择。当局部也有定义时,就按照局部的来转。

所以对以公共的内容,就可以定义到全局里,例如错误处理等。

 

动态ActionForward:

静态ActionForward在运行期改不了,采用动态ActionForward,在运行期是可以改动的。

  String page = request.getParameter("page");

ActionForward af = new ActionForward();
  af.setPath("/page" + page + ".jsp?name=Tom");
  return af;

静态的 ActionForward的url是不能加参数的,而使用动态的ActionForward,则可以加参数。

 

ActionForward的使用

1、理解全局和局部ActionForward的概念
2、redirect的使用
3、struts-config.xml文件不允许动态修改
4、理解动态ActionForward,动态的ActionForward是可以运行期修改的

 

 http://sundful.javaeye.com/blog/143167

ActionForward的作用就是从一个页面链接到另一个页面,最简单的应用就是mapping.findForward("success")。

属性:name-逻辑名称;path-URL;redirect-当设置为true是,重定向,默认为false;className(可选)-默认为ActionForward。

一般的调用过程:当ActionServlet调用Action时,Action 把Mapping的findForward()传递给它。findForward()先在局部forward转发列表中寻找key,如果没找到,再从全局forward转发列表中寻找。如果都没找到,此方法将返回null,浏览器报错。

在<html:link>标记中的使用:
在配置文件中定义一个forward:
Java代码 复制代码
  1. <forward name="article" path="/do/article?dispatch=view"/>  

<html:link>中:
Java代码 复制代码
  1. <html:link forward="article" paramName="articleForm" paramProperty="articleKey" paramId="key">News from the edge</html:link>  

运行结果:
Java代码 复制代码
  1. <a href="http://localhost/artimus/do/article?dispatch=view&key=17">News from the edge</a>  

注意这边,如果已经存在一个参数,标签会很聪明的帮你添加一个连接符号,之后再添加参数。
添加自己要转发的路径:
Java代码 复制代码
  1. public ActionForward execute( ActionMapping mapping,   
  2.                               ActionForm form,    
  3.                               HttpServletRequest request,   
  4.                               HttpServletResponse response)    
  5.                                throws Exception{   
  6.         ActionForward forward = new ActionForward();   
  7.         String loginid = ((LoginForm)form).getLoginid();   
  8.         String password = ((LoginForm)form).getPassword();   
  9.         if(...){   
  10.              ......  // business code    
  11.             forward.setPath("welcome.jsp");   
  12.         }else{   
  13.             ActionMessages errors = new ActionMessages();   
  14.             .......   
  15.             forward = mapping.findForward("Failure");   
  16.         }   
  17.         return forward;   
  18.     }  

在Action 类中添加参数:
Java代码 复制代码
  1. ActionForward forward = mapping.findForward("article");   
  2. StringBuffer path = new StringBuffer(forward.getPath());   
  3. boolean isQuery = (path.indexOf("?")>=0);   
  4. if (isQuery)   
  5. path.append("&amp;dispatch=view");   
  6. else  
  7. path.append("?dispatch=view");   
  8. return new ActionForward(path.toString());   

如果ActionForward 没有设置为重定向,新的参数将被合并到当前request的参数中。如果新的参数的名称和原参数名称相同,在新的转发期内将使用新的参数值。
 
 
 
 
http://liuyinhuan.javaeye.com/blog/271181

ActionForward的使用

 

   1ActionForward包含转向信息

  

   2、全局forward和局部forward

        * 全局forward,若很多个Action处理完后都要转向到某页面,不妨把该页面设为全局forward:

Java代码 复制代码
  1. <global-forwards>   
  2.      <forward name="login" path="/login.jsp" redirect="true"/>   
  3. </global-forwards>  

 

        * 局部forward:

Java代码 复制代码
  1. <action path="/login"    
  2.         type="cn.huan.struts.LoginAction"  
  3.         name="loginForm"  
  4.         scope="request"  
  5.         >   
  6.       <forward name="success" path="/login_success.jsp"/>   
  7.       <forward name="error" path="/login_error.jsp"/>   
  8.  </action>  

 

        * mapping.findForward方法会先自动找配置中的局部forward,若没有就找全局forward

         

  

   3、转发和重定向

          转向:同一个request

          重定向:需设置redirect="true",另建一个新request,故改变了url

         

   4、转发和重定向都可以自己定义而不用struts提供的ActionForward

        

         在Action中自定义转向: 

Java代码 复制代码
  1. RequestDispatcher dispatcher = request.getRequestDispatcher("/mustlogin.jsp");   
  2. dispatcher.forward(request, response);   
  3. return null;  

 

 

         在Action中自定义重定向:        

Java代码 复制代码
  1. response.sendRedirect(request.getContextPath() + "/login.jsp");   
  2. return null;  

 

 

              

   5struts-config.xml文件和web.xml文件在运行时都不能动态修改,也就是不能再在Action中改已配置好的属性值

 

  

   6、动态ActionForward

         不需要修改Action代码和增加<forward>配置

 

 

      

     例如:如果需要根据页面输入的值动态的跳转到不同页面:

Java代码 复制代码
  1. <form action="dynaactionforward.do" method="post">   
  2.    页面:<input type="text" name="page"><br>   
  3.    <input type="submit" value="提交">   
  4. </form>  

 

 

          

 

 

   则用动态ActionForward可很好地实现,Action和配置信息分别为(其中注释部分为没有使用动态   ActionForm时的代码):

    Action代码:

Java代码 复制代码
  1. package cn.huan.struts;   
  2.   
  3. import javax.servlet.http.HttpServletRequest;   
  4. import javax.servlet.http.HttpServletResponse;   
  5.   
  6. import org.apache.struts.action.Action;   
  7. import org.apache.struts.action.ActionForm;   
  8. import org.apache.struts.action.ActionForward;   
  9. import org.apache.struts.action.ActionMapping;   
  10.   
  11. /**  
  12.  * 动态ActionForwad测试  
  13.  * @author 刘银环  
  14.  *  
  15.  */  
  16. public class DynaActionForwardTestAction extends Action {   
  17.   
  18.     /* (non-Javadoc)  
  19.      * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)  
  20.      */  
  21.     @Override  
  22.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
  23.             HttpServletRequest request, HttpServletResponse response)   
  24.             throws Exception {   
  25.         String page = request.getParameter("page");   
  26. //      ActionForward af = null;   
  27. //      if("1".equals(page)){   
  28. //          af = mapping.findForward("page1");   
  29. //      }else if("2".equals(page)){   
  30. //          af = mapping.findForward("page2");   
  31. //      }   
  32. //      return af;   
  33.            
  34.         //动态ActionForward   
  35.         ActionForward af = new ActionForward();   
  36.         af.setPath("/page" + page + ".jsp");   
  37.         return af;   
  38.     }   
  39.   
  40. }  

 

   配置信息:

Java代码 复制代码
  1. <action path="/dynaactionforward"  
  2.         type="cn.huan.struts.DynaActionForwardTestAction">   
  3.         <!--    
  4.         <forward name="page1" path="/page1.jsp"/>   
  5.         <forward name="page2" path="/page2.jsp"/>   
  6.          -->   
  7. </action>  
 
原创粉丝点击