Struts框架:ActionForward详细介绍 您所在的位置:网站首页 股份有限公司成立的条件是什么 Struts框架:ActionForward详细介绍

Struts框架:ActionForward详细介绍

#Struts框架:ActionForward详细介绍| 来源: 网络整理| 查看: 265

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

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

1    2        3  

  上面就是对全局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     }  

  注意:return null是必须的。

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

1 2 ······ 3    5    6            7            8        9        10   

  Jsp页面如下:

1    2         页面:   3             4   

  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中的,删除即可。大家还会发现动态ActionForward还有个好处,就是可以跟参数,此例中传递了name=tom的参数。

  本文非原创,引用于:http://blog.csdn.net/fengg5241/article/details/6539641

  支持原创!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有