Struts――ActionForward
來源:程序員人生 發布時間:2014-09-30 02:09:49 閱讀次數:2797次
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的重定向和轉發的作用相同。他封裝好了頁面跳轉的代碼,可以讓我們使用時僅僅傳入一個參數,大大簡化了我們的操作,可以使我們只專注于業務。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈