美文网首页
ActionForward详细介绍

ActionForward详细介绍

作者: 我是陈君本 | 来源:发表于2016-06-06 14:47 被阅读585次

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

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

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

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

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

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

view plain

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

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

view plain

ActionForwardaf=mapping.findForward("login");

af.setRedirect(false);

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

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

view plain

@Override

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

//重定向

response.sendRedirect(request.getContextPath()+"/login.jsp");

returnnull;

}

注意:return null是必须的。

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

view plain

type="com.bjsxt.struts.DynaActionForwardTestAction"

>

jsp页面如下:

view plain

页面:

java action如下:

view plain

publicclassDynaActionForwardTestActionextendsAction{

@Override

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

Stringpage=request.getParameter("page");

ActionForwardaf=null;

if("1".equals(page)){

af=mapping.findForward("page1");

}elseif("2".equals(page)){

af=mapping.findForward("page2");

}

returnaf;

}

}

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

view plain

publicclassDynaActionForwardTestActionextendsAction{

@Override

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{

Stringpage=request.getParameter("page");

ActionForwardaf=newActionForward();

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

returnaf;

}

}

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

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

相关文章

  • ActionForward详细介绍

    今天来讲解下struts种另一个比较重要的内容actionForward,相信通过前面的学习,大家对actionF...

  • 开源协议介绍

    详细介绍 MPL (Mozilla Public License) 协议 详细介绍 MIT 协议 详细介绍 Apa...

  • Linux Users and groups

    详细介绍

  • 奔驰详细介绍

  • zbus 详细介绍

    小巧而极速的MQ, RPC实现, 支持HTTP/TCP代理,开放易扩展,多语言支撑微服务,系统总线架构 zbus核...

  • Saltstack详细介绍

    自动化运维工具Saltstack详细介绍 标签:salt自动化运维salt-master 版权声明:原创作品,如需...

  • MagicalRecord详细介绍

    MagicalRecord,一个简化CoreData操作的工具库 简介 项目主页:https://github.c...

  • whoosh详细介绍

    Whoosh 是一个纯python实现的全文搜索组件。Whoosh不但功能完善,还非常的快。 Whoosh的作者是...

  • CocoaPods 详细介绍

    一、CocoaPods简介 iOS 和 OS X下的一个第三方库管理工具,类似的iOS工具还有Carthage(比...

  • jQuery详细介绍

    一.$ 符号1 将“$”定义为变量,运行如下代码: 运行结果: 2 将代码修改如下: 运行结果: 由上操作对比可知...

网友评论

      本文标题:ActionForward详细介绍

      本文链接:https://www.haomeiwen.com/subject/qmzrdttx.html