actionForm详解

转载 2015年11月18日 10:23:45

 ActionForward详细介绍


    之前说了很多关于actionForm的内容,今天就来讲解下struts种另一个比较重要的内容actionForward,相信通过前面的学习,大家对actionForward已近不陌生了,这篇文章就是来系统讲解一下actionForward的。

    actionForward的作用:封装转发路径,通俗点说就是说完成页面的跳转和转向。那它既然是转向,到底是转发还是重定向呢?默认的情况下,actionForward采用的是转发的方式进行页面跳转的。

    我在这里再啰嗦一下吧,也给自己加深下印象,说一下转发和重定向的区别。最大的区别就是转发的时候,页面的url地址不变,而重定向的时候页面的url地址会发生变化。简单说明一下原因,因为转发的时候是采用的一个request(请求),既然页面跳转前后是同一个request,页面url当然不会变了;而重定向采用的是2个request,页面跳转前后的url当然会不同了。

    好,说到这,大家会问,既然actionForward跳转的方式默认的是转发,那如果我非要用重定向的方式,该如何设置呢?恩,这很简单,大家都在struts-config.xml坐过actionForward的配置吧,比如这句    <forward name="login" path="/login.jsp" redirect="true"/>

其实通常我们都没写redirect属性,而是采取的是它的默认值false,表示的是转发,如果设置为true,即为重定向。

    下面再说一下全局和局部ActionForward的概念。在编程的时候,我们有时候会遇到这种情况,当增加一条记录成功时,跳转到成功页面,在struts-config.xml我们做对“增加”这个action加一个<forward name="success" path="/login_success.jsp"/>;在修改一条记录成功时,我们也会跳转到成功页面,在struts-config.xml我们做对“修改”这个action加一个<forward name="success" path="/login_success.jsp"/>;而同样当删除一条记录成功时,跳转到成功页面,在struts-config.xml我们又对“删除”这个action加一个同样的<forward name="success" path="/login_success.jsp"/>;相信大家会对同样的代码重复的写干到反感吧,那有没有办法解决呢?有,那就是全局ActionForward,针对上面这种情况,我们在<action-mappings>标签的上面加上

  1. <global-forwards>  
  2.     <forward name="success" path="/login_success.jsp"/>  
  3. </global-forwards>  
 

    上面就是对全局ActionForward的一种配置,而我们之前写的那些就是局部ActionForward。那么如果局部ActionForward和全局ActionForward同时出现,到底是按照哪个配置进行页面跳转呢?规则很简单,采用的是就近原则,就是说如果有局部ActionForward,就按照局部ActionForward就行跳转,如果没有就按照全局的跳转。

    相信有的朋友会说,我怎么不早说,ActionForward还可以设置重定向的跳转方式,然后他还不想对原来的struts-config.xml文件进行修改,想在写的java文件的action中改,如下

  1. ActionForward af mapping.findForward("login");  
  2. af.setRedirect(false);  

这样当然也是可以的啦,不过记住要重启服务器,因为struts-config.xml文件不允许动态修改。

    我还想说明一点的是,我们也可以不依赖struts的ActionForward进行转向,不要学了一样,忘了之前学的,之前我们都是通过response进行转向的,在struts中,我们当然也可以,在action中覆写execute方法,如下:

  1. @Override  
  2.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  3.             HttpServletRequest request, HttpServletResponse response)  
  4.             throws Exception  
  5.           
  6.             //重定向  
  7.             response.sendRedirect(request.getContextPath() "/login.jsp");  
  8.             return null 
  9.       
  10.      

注意:return null是必须的。

    下面在介绍下动态ActionForward,动态的ActionForward是可以运行期修改的。有这么个场景:页面有一个输入域,我输入1的时候,跳转到1的页面,输入2跳转到2的页面,我们利用之前学过的知识来实现下,先配置下XML:

  1.     <action path="/dynaactionforward"  
  2.             type="com.bjsxt.struts.DynaActionForwardTestAction"   
  3.     >  
  4.   
  5.         <forward name="page1" path="/page1.jsp"/>  
  6.         <forward name="page2" path="/page2.jsp"/>  
  7.       
  8.     </action>  
  9. </action-mappings>  

    jsp页面如下:

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

    java action如下:

  1. public class DynaActionForwardTestAction extends Action  
  2.     @Override  
  3.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  4.             HttpServletRequest request, HttpServletResponse response)  
  5.             throws Exception  
  6.           
  7.         String page request.getParameter("page");  
  8.         ActionForward af null 
  9.         if ("1".equals(page))  
  10.             af mapping.findForward("page1");  
  11.         }else if ("2".equals(page))  
  12.             af mapping.findForward("page2");  
  13.          
  14.         return af;  
  15.       
  16.      
  17.  

 

    相信这对大家来说是小菜一碟啦,但是如果我想在此基础上实现当我输入3,跳转到3的页面,输入4,5,。。。以此类推下去,怎么办呢,如果还是采用这种方式,很麻烦吧,改动的太多啦。此时我们可以考虑采用动态ActionForward,说白了就是我们自己构造一个ActionForward,通过new的方式,看一下改后的action

  1. public class DynaActionForwardTestAction extends Action  
  2.     @Override  
  3.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  4.             HttpServletRequest request, HttpServletResponse response)  
  5.             throws Exception  
  6.           
  7.         String page request.getParameter("page");  
  8.         ActionForward af new ActionForward();  
  9.         af.setPath("/page" page ".jsp?name=Tom");  
  10.         return af;  
  11.      
  12.  

    之后,再把XML中的<forward name="page1" path="/page1.jsp"/>,<forward name="page2" path="/page2.jsp"/>删除即可。大家还会发现动态ActionForward还有个好处,就是可以跟参数,此例中传递了name=tom的参数。

    好了,ActionForward就介绍完了,下次会说点啥嘞,to be continued 喽


转自:http://blog.csdn.net/fengg5241/article/details/6539641

Struts旅程(三)Struts表单处理器ActionForm(静态动态)

上篇我们以登录为例讲解了struts配置,实现了使用struts框架进行登录的示例。一些名词已经在脑海中飘荡了。 ActionServlet:struts的控制器,负责截取URL或分发。提供Model...
  • lovesummerforever
  • lovesummerforever
  • 2014年02月10日 08:00
  • 11761

在struts1中使用DispatchAction对应多个ActionForm,实现写一个Action实现增删改查操作---一个Action处理多个操作的能力

先来了解DispatchAction类: 原始的配置action都是使用一个Action类实现一个功能,当工程项目很大的时候,Action类数目会很多,导致代码文件膨胀,这就增加了该项目后期的维护难度...
  • lycyl
  • lycyl
  • 2015年05月19日 11:24
  • 1303

Struts中静态动态ActionForm的使用(一)

目录 登录例子 区别 时间属性 验证机制         在Struts1中,我们经常接触ActionForm为静态ActionForm。静态是指开发者在使用struts框架时...
  • llhhyy1989
  • llhhyy1989
  • 2013年02月18日 11:31
  • 2712

Struts功能详解——ActionForm

一:什么是ActionFormActionForm可以从下面四点理解它1 . ActionForm表示Http窗体的数据,也就是咱们页面表单数据收集器,可以看作是模型和视图的中介,他负责保存表单中的数...
  • lsh6688
  • lsh6688
  • 2012年04月30日 16:06
  • 10087

ActionForm详解

使用ActionForm把表单数据单独封装起来,而且提供了自动的数据验证,简化了代码的编写,给我们带来了极大的方便。 但是,ActionForm也存在一些明显的不足: 1、如果Action...
  • u011518709
  • u011518709
  • 2014年08月26日 15:28
  • 514

Struts高级开发_动态ActionForm.avi

  • 2014年09月30日 12:41
  • 11.56MB
  • 下载

struts中静态ActionForm基本验证

  • 2013年02月18日 21:38
  • 1.47MB
  • 下载

ActionForm属性中存在对象数组如何处理

  • 2009年06月08日 13:31
  • 33KB
  • 下载

一个Jsp两个ActionForm分别提交.rar

  • 2009年06月11日 19:42
  • 1.7MB
  • 下载

Struts2框架ActionForm自动填充表单

  • 2016年09月22日 15:23
  • 1.3MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:actionForm详解
举报原因:
原因补充:

(最多只允许输入30个字)