1

私はSpringが初めてで、次の方法でデータベースからドロップダウンデータを取得しているという点で、ページaddContactを持っています

@RequestMapping("/addContact")
 public ModelAndView registerContact(@ModelAttribute Contact contact) {
 List<ContactType> contactTypeList = contactdao.getContactTypeList();
 Map<Integer,String> contactTypeSelect = new LinkedHashMap<Integer,String>();
 Iterator<ContactType> iterator = contactTypeList.iterator();
while (iterator.hasNext()) {
    ContactType ct = iterator.next();
    contactTypeSelect.put(ct.getContactTypeId(),ct.getContactTypeName());
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("contactTypeSelect", contactTypeSelect);
 return new ModelAndView("addContact", "map", map);
}

データベースにデータを挿入するために、次の方法があります。

@RequestMapping("/insert")
public String insertData(@Valid Contact contact, BindingResult result,    HttpServletRequest request )  {
  if (result.hasErrors()) {
        return "addContact";
    } 
  else {
      HttpSession session = request.getSession();
      session.setAttribute("path", request.getSession().getServletContext().getRealPath("/WEB-INF"));
      if (contact != null){
            contactService.insertData(contact,request);
      }
      return "redirect:/getList";
  }

}

検証が失敗すると、ドロップダウン データが失われます (これは明らかです)。検証を行う正​​しい方法は何ですか。

4

2 に答える 2

1

insertData メソッドで連絡先マップに追加していないため、ドロップダウン データが失われます。連絡先データを取得するコードを別の (プライベート) メソッドに引き出し、それを result.hasErrors() if ブロックで使用します。

if (result.hasErrors()) {
   return new ModelAndView("addContact", "map", map);
} 

また、 @RequestMapping アノテーションに次のようなメソッドを追加することを強くお勧めします。

@RequestMapping("/insert", method=RequestMethod.POST)

これにより、人々はこのメソッドに対して GET 呼び出しを行うことができなくなります。

于 2013-09-12T13:16:41.847 に答える