2013-08-24 68 views
0

在我们的应用程序中,我们要求我们需要在对象的数据库中创建条目,然后将其发送给用户以使其中的更改相同。如下图所示的 - :在Spring MVC中保持对象的状态相同

@RequestMapping(value = "/addCompany", method = RequestMethod.POST) 
public ModelAndView addCompany(
     @ModelAttribute("company-entity") Company company, 
     BindingResult result) { 
    CompanyService companyService = (CompanyService) applicationContext 
      .getBean("companyService");  
    companyService.saveVersionAsDraft(company, 1110);*/ 
    return new ModelAndView("success"); 
} 

    //Delegate to addPage after making an entry in the database 
@RequestMapping("/companyHome") 
public ModelAndView showCompanyForm() { 
    System.out.println("CompanyController.showContacts()"); 
    CompanyService companyService = (CompanyService) applicationContext 
      .getBean("companyService"); 
    CommonService commonService = (CommonService) applicationContext.getBean("commonService"); 
    Company company = (Company) companyService.addNew(new Company(), 1100); 
    ModelAndView modelAndView = new ModelAndView("company"); 
    modelAndView.addObject("companyCategories", 
      companyService 
       .findAllCompanyCategories()); 
    modelAndView.addObject("sectors", commonService.findAllSectors()); 

    modelAndView.addObject("companyStatus", 
      companyService.findAllCompanyStatuses()); 

    ModelAndView modelAndView = new ModelAndView("company"); 
    modelAndView.addObject("company-entity",company); 

    return modelAndView; 
} 

现在在这家公司的对象,我们也通过DB的首要重点,我们需要使用添加公司()。所以我们需要用表单中的对象返回这个主键。 有没有办法做到这一点? 我们有6到7个这样的条目,所以我们不能在表单中使用隐藏字段。

+1

我完全不理解你的问题。可以肯定的是,你还没有真正理解什么是依赖注入。你不应该调用applicationContext.getBean()来从控制器获取服务:它应该被Spring注入。用一个具体的例子来解释你想要达到的目标。 –

+0

为什么你不能在隐藏的表单域完美解决你的问题时使用隐藏的表单域? – Bart

+0

你的'showCompanyForm'也有缺陷,你正在构造2个ModelAndView对象。你忽略第一个,构建一个新的(只添加公司)并返回它。基本上所有的参考数据现在都消失了。 –

回答

0

就像JB Nizet说的那样,你绝对不会使用Spring的核心:依赖注入。 而不是使用一个服务豆直接获取的:

CompanyService companyService = (CompanyService) applicationContext 
     .getBean("companyService"); 

你应该让春用那种在你的控制器成才注入它:

@Autowired 
private CompanyService companyService; 

除此之外,关于你的问题,你有三个保留id的选项。第一个解决方案中使用Spring所提出的一些修改域对象(由问题的REST方法的启发)的经典方式:

//Delegate to addPage after making an entry in the database 
@RequestMapping("/company/{id}") 
public ModelAndView showCompany(@PathVariable("id") Long id,Model model) { 

使用这个,你将永远在URL中的ID,所以你会继续使用它。

如果您利用Spring的'form'标记,第二个选项可用。你只需要创建一个窗体:隐藏字段,并给他的路径=“yourIdAttribute”

第三个是类似的,但你必须创建一个标准的输入类型=“隐藏”,然后得到它在你的控制器someting像这样:

public ModelAndView showCompany(@RequestParam(value="name_of_your_field") Long id,...) 

不要犹豫,问你是否需要更多的细节。

相关问题