spring mvc註解方式實現向導式跳轉頁面 – JAVA編程語言程序開發技術文章

由於項目需要用到向導式的跳轉頁面效果,本項目又是用spring mvc實現的,剛開始想到用spring 的webflow,不過webflow太過笨重,對於我們不是很復雜的跳轉來說好像有種“殺雞焉用牛刀”的感覺,於是就網上搜索看有沒有類似的解決方案,網上的答案一般都是叫你繼承AbstractWizardFormContoller這個類來實現,但對於spring mvc3.0.x這個類將不再使用,轉而推薦使用註解的方式來實現,於是參考官方文檔,用註解方式實現瞭向導式頁面。

下面是代碼示例:

[java]@Controller 
@RequestMapping("/wizard.htm") 
//需要保存在session中的變量 
@SessionAttributes("bean") 
public class TestWizardController{ 
   
  @Resource(name = "beanService") 
  private BeanService beanService;   
   
  @RequestMapping 
  public String step1(final ModelMap modelMap){ 
    modelMap.addAttribute("bean", new Bean()); 
    return "step1"; 
  } 
   
  @RequestMapping(params = "_step=2") 
  public String step2(final @ModelAttribute("bean") Bean bean, 
                      final Errors errors){ 
    return "step2"; 
  } 
   
  @RequestMapping(params = "_step=3") 
  public String step3(final @ModelAttribute("bean") Bean bean, 
                      final Errors errors){ 
    return "step3"; 
  } 
   
  @RequestMapping(params = "_finish") 
  public String processFinish(@ModelAttribute("bean")Bean bean, 
                              final Errors errors, 
                              final ModelMap modelMap, 
                              final SessionStatus status){ 
 
    beanService.add(bean);    
    status.setComplete(); 
    return "success"; 
  } 
   
  @RequestMapping(params = "_cancel") 
  public String processCancel(final HttpServletRequest request, 
                              final HttpServletResponse response, 
                              final SessionStatus status){ 
     status.setComplete(); 
     return "cancel"; 
  } 
     

其中www.aiwalls.com起到最大作用的就是@SessionAttributes這個註解,它定義瞭一個在session范圍內的變量,這個變量可以在不同的頁面跳轉時保持狀態。

第一次訪問http:/www./example.com/wizard.htm時進入step1方法,其後提交的表單action後面都要加上相應的參數,如:

step1頁面 <form action="http:/www./example.com/wizard.htm?_step=2">

step2頁面 <form action="http:/www./example.com/wizard.htm?_step=3">

step3頁面 <form action="http:/www./example.com/wizard.htm?_finish">

摘自 laigood12345的專欄

發佈留言