2013-01-15 160 views
1

我正在使用spring jdbc模板進行CRUD。 插入,選擇和刪除操作工作正常,但我在更新過程中得到了以下異常。org.springframework.web.util.NestedServletException:請求處理失敗

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標註爲控制器了。 如何解決它?任何形式的幫助表示讚賞。

回答

1

我改變了我的帖子方法來跟隨和它的工作。

public String save(@ModelAttribute("company")Company company,BindingResult result, ModelMap map) 
+1

它的工作原理是您將ModelAttribute更改爲Company對象。不過,我建議閱讀更多內容來了解​​ModelAttribute的基礎知識(http://stackoverflow.com/questions/3423262/what-is-modelattribute-in-spring-mvc)。簡而言之,如果你只需要一個請求中的這個屬性,那麼使用ModelAttribute是一種浪費。 –

2

我看到您正在嘗試使用Integer companyId作爲ModelAttribute。我不會爲這種情況推薦ModelAttribute(因爲它太過於容易被濫用,所以過度使用&),但是如果您使用,您是否要先聲明該ModelAttribute的值?

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

如果只指定類似上面的值,系統將嘗試初始化一個整數的所有請求。這不能完成,因爲類Integer沒有默認的講師。

因此,我建議做這樣的:

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

如果你仍然想使用一個共享的ModelAttribute所有您的要求,您必須首先intialize它:

@ModelAttribute("company") 
public Integer companyId(){ 
    return 0; 
} 
+0

的ID,但使用@Valid它給了一個錯誤「註釋類型的屬性值未定義有效」 –

+1

對不起,我忘了。 @Valid僅用於Object。無論如何,你將不需要驗證整數。 「@RequestParam」就足夠了。 –

+1

我已經更新了我的答案。 –

-3

您的網址不能重複不同。

  1. 必須將網址
  2. @ModelAttribute ("company") company
0
@ModelAttribute("company") 
public Integer companyId(){ 
return 0; 
} 

提防這個的肯定,你會在所有companyId有0,這可能是危險的污物。

¿您可以使用嗎?

@PathVariable(value="companyId") 

編輯必須像保存唯一的變化是companyId如果要保存必須爲0或空,如果您正在編輯必須是公司

相關問題