首页 > 代码库 > Struts——ActionForward
Struts——ActionForward
ActionForward
ActionForward继承自ForwardConfig;此类提供了多种参数不同的构造函数方法。用于封装转发路径,用来完成转发或重定向。ActionForward默认的是转发方式跳转界面;当然也支持重定向的方式,将redirect属性设置为true即可。
全局Or局部
就和字面意思一样;全局和局部是作用域不同,就像我们声明变量时,局部变量和全局变量的作用域也不同。
我们平时写的都是局部使用的,下面我们看下全局的该如何配置:
<global-forwards> <forwardname="success" path="/login_success.jsp"/> </global-forwards>
那么当我们即配置了全局forward又配置了局部的forward,程序会跳转到哪个呢?程序采用的是就近原则,如果配置了局部的forward,那么就会跳转至局部的forward。
示例:
假设我们现在有这种情况,根据登录的用户的不同的用户角色跳转到不同的界面,admin用户跳转到admin界面;root用户跳转到root界面;common用户跳转到common界面。
第一种Action的写法:
publicActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throwsException { LoginActionFormlaf=(LoginActionForm)form; Stringusername = laf.getUsername(); Stringpassword = laf.getPassword(); //调用逻辑 if("admin".equals(username)&&"admin".equals(password)){ //登录成功跳转到管理员界面 returnmapping.findForward("admin"); }elseif("root".equals(username)&&"root".equals(password)){ //登录成功跳转到基础界面 returnmapping.findForward("root"); }elseif("common".equals(username)&&"common".equals(password)){ //登录成功跳转到基础界面 returnmapping.findForward("common"); }else{ //登录失败 returnmapping.findForward("error"); } }
这一种写法很不灵活,如果用户角色又增加了很多种,岂不是每增加一种都要修改一次代码?重新编译?这样不利于应对变化。
第二种Action的写法:
publicActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throwsException { LoginActionFormlaf=(LoginActionForm)form; StringuserRole=laf.getUserrole(); StringuserName=laf.getUsername(); ActionForward af = newActionForward(); af.setPath("/page" + userRole+ ".jsp?username="+userName); return af; } }
这一种写法,我们可以把要跳转的信息存在ActionForm中,根据传进去的参数不同,进行页面的跳转。同时,这种写法还可以传递参数。
总结
在struts中,ActionForward起到的作用和request的重定向和转发的作用相同。他封装好了页面跳转的代码,可以让我们使用时仅仅传入一个参数,大大简化了我们的操作,可以使我们只专注于业务。
Struts——ActionForward