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

上記のように値のみを指定すると、システムはすべての requests に対して 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 メソッドを次のように変更したところ、うまくいきました。

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

edit は save のようにする必要があります。唯一の変更は companyId です。保存する場合は 0 または null にする必要があり、編集する場合は会社の ID にする必要があります。

于 2014-04-10T12:11:21.433 に答える
-3

URL を異なる方法で繰り返すことはできません。

  1. URLを確認する必要があります
  2. @ModelAttribute ("company") company
于 2014-03-18T03:09:07.273 に答える