在Spring MVC中保持Object的状态相同

时间:2013-08-24 12:01:09

标签: spring 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的主键,我们需要在添加Company()时使用它。所以我们需要使用表单中的对象返回此主键。 有没有办法这样做? 我们有6到7个这样的条目,所以我们不能在表单中使用隐藏字段。

1 个答案:

答案 0 :(得分:0)

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

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

你应该让Spring在你的控制器中注入类似的内容:

@Autowired
private CompanyService companyService;

除此之外,关于你的问题,你有三个选择来保持id。第一个解决方案使用Spring提出的经典方法来编辑一些域对象(受RestFull方法的启发):

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

使用此功能,您将始终在网址中包含ID,因此您将保留该网址。

如果您利用Spring的'form'标签,则可以使用第二个选项。您只需要创建一个表单:hidden field并给他path =“yourIdAttribute”

第三个是类似的,但你必须创建一个标准的输入类型=“隐藏”,然后在你的控制器中得到它,如下所示:

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

不要犹豫,询问您是否需要更多详细信息。