使用基于注释的控制器在表单之间导航

时间:2010-08-09 11:17:58

标签: spring-mvc

我是新注释的控制器,我有一个问题。我听说可以使用它们在表单之间导航,但是无法实现。

很可能我可以使用SWF但是对于整个项目控制器更合适。

我的控制器看起来像这样:

@Controller
public class AnDBChooseController {

 @RequestMapping("/dbchoose")
 public ModelAndView choose(@ModelAttribute("db") ComponentDB db){
  ModelAndView mv=new ModelAndView();
  switch(db.getDbAction()){
  case 1:   // dodanie komponentu
   if (db.getDbType().equals(ComponentDB.DB_CAPACITOR)){ 
    mv.addObject("capacitor",new Capacitor());
    mv.setViewName("addcapacitor");

   }else if (db.getDbType().equals(ComponentDB.DB_RESISTOR)){ 
    mv.setViewName("addresistor");

   }
   break;
  case 2:   // future
   break;
  case 3:   // future
   break;
  default:  // future
   break;

  }
  return mv;
 }
}

此控制器应该将我发送到addcapacitor.jsp

Secound控制器(巫婆永不开始)

@Controller
public class AnAddCapacitorController {

 ComponentParamTypeService paramService;

 @ModelAttribute("subclass")
 public ArrayList<ComponentParamType> getSubclasses(){
                System.out.println("I am here :]");
  return paramService.getParamsForType(ComponentParamType.SUBCLASS_CAPACITOR);
 }

 @RequestMapping("/addcapacitor")
 public String add(@RequestParam("capacitor")Capacitor capacitor){
  return "addcapacitordetails";
 }

 public ComponentParamTypeService getParamService() {
  return paramService;
 }

 public void setParamService(ComponentParamTypeService paramService) {
  this.paramService = paramService;
 }
}

当然“我在这里:]”从未在控制台上显示:(

应如何更改,以便重定向到addcapacitor whitout丢失模型参数?

1 个答案:

答案 0 :(得分:1)

您可以让方法返回String而不是ModelAndView。然后转向行动。

@RequestMapping("/dbchoose")
 public String choose(@ModelAttribute("db") ComponentDB db, Model model){
  switch(db.getDbAction()){
  case 1:   // dodanie komponentu
   if (db.getDbType().equals(ComponentDB.DB_CAPACITOR)){ 
    mv.addAttribute("capacitor",new Capacitor());
    return "forward:/addcapacitor";   

   }else if (db.getDbType().equals(ComponentDB.DB_RESISTOR)){ 
    return "forward:/addresistor";   

   }
   break;
  case 2:   // future
   break;
  case 3:   // future
   break;
  default:  // future
   break;

  }
 }