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的重定向和转发的作用相同。他封装好了页面跳转的代码,可以让我们使用时仅仅传入一个参数,大大简化了我们的操作,可以使我们只专注于业务。