0

在我们的应用程序中,我们需要在数据库中创建对象的条目,然后将其发送给用户以进行相同的更改。如下图-:

    @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 的主键,我们需要在 add Company() 中使用它。所以我们需要用表单中的对象返回这个主键。有什么办法吗?我们有 6 到 7 个此类条目,因此我们不能在表单中使用隐藏字段。

4

1 回答 1

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) {

使用它,您将始终在 url 中有 id,因此您将保留它。

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

第三个类似,但您必须创建一个标准输入 type="hidden" ,然后将其放入您的控制器中,如下所示:

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

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

于 2013-08-24T17:17:56.943 回答