2

我正在使用 spring jdbc 模板进行 CRUD。插入、选择和删除操作工作正常,但我在更新过程中遇到了以下异常。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.lang.Integer]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.lang.Integer.<init>()

这是我的控制器:

@RequestMapping(value="/editCompany/{companyId}", method= RequestMethod.GET)
    public String edit(@PathVariable(value="companyId")Integer companyId,ModelMap map) {

        Company company=companyService.get(companyId);
        map.addAttribute("company", company);
        map.put("companyId", companyId);
        return "editCompany"; 
    }

    @RequestMapping(value="/editCompany/{companyId}", method= RequestMethod.POST)
        public String save(@ModelAttribute("company")Integer companyId,Company company,BindingResult result, ModelMap map) {

        companyValidator.validate(company, result);
        if (result.hasErrors()) {
            return "editCompany";
        } else {
            Integer i=companyService.save(company);

            return "status";
        }
    }

我也@Autowired为控制器使用了注释。如何解决?任何形式的帮助表示赞赏。

4

4 回答 4

3

我看到您正在尝试使用 Integer companyId 作为 ModelAttribute。我不会在这种情况下推荐 ModelAttribute (因为它是矫枉过正且容易误用),但如果你使用,你之前有没有声明过 ModelAttribute 的值?

public String save(@ModelAttribute("company")Integer companyId,Company company,BindingResult result, ModelMap map) {

如果您只指定上述值,系统将尝试为所有请求初始化一个 Integer。这无法完成,因为 Integer 类没有默认讲师。

因此,我建议这样做:

public String save(@RequestParam("company")Integer companyId,Company company,BindingResult result, ModelMap map) {

如果您仍想对所有请求使用共享的 ModelAttribute,则必须首先对其进行初始化:

@ModelAttribute("company")
public Integer companyId(){
    return 0;
}
于 2013-01-15T07:56:38.760 回答
1

我将我的 Post 方法更改为 following 并且它有效。

public String save(@ModelAttribute("company")Company company,BindingResult result, ModelMap map)
于 2013-01-16T09:50:33.123 回答
0
@ModelAttribute("company")
public Integer companyId(){
return 0;
}

请注意这一点,您将在所有 companyId 中有 0,这可能对 crud 很危险。

¿你能用吗?

@PathVariable(value="companyId")

编辑必须像保存一样,唯一的更改是 companyId,如果您正在保存,则必须为 0 或 null,如果您正在编辑,则必须是公司的 id

于 2014-04-10T12:11:21.433 回答
-3

您的 URL 不能以不同的方式重复。

  1. 您必须确定网址
  2. @ModelAttribute ("company") company
于 2014-03-18T03:09:07.273 回答