эталонные данные теряются, когда форма не проходит проверку в контроллере на основе аннотаций spring3 - PullRequest
4 голосов
/ 16 сентября 2010

Я делаю контроллер Spring на основе аннотаций.Проблема в том, что при неудачной проверке эталонные данные теряются, а именно материал countryDivisions.Я не поместил его в форму, потому что это не редактируемые пользователем данные, и ортодоксальность заключается в том, что в форму попадают только редактируемые пользователем данные.У меня есть другой выбор?

@Controller
public class MyInfoController {

   @Autowired
    private MyInfoFormValidator validator;

 private void loadReferenceData(ModelMap model) {
        model.put("countryDivisions",countryDivisionService.getCountryDivisionOrderedByCode());
    }

  @ModelAttribute
    private MyInfoForm loadMyInfo() {
        MyInfoForm form = new MyInfoForm();
     //load it up
    return form;
    }


    @RequestMapping(value="/editMyInfo", method = RequestMethod.GET)
    public String editMyInfo(ModelMap model ) {
        loadReferenceData(model);
        return "contactEdit";
    }

  @RequestMapping(value="/editMyInfo", method = RequestMethod.POST)
    public String saveMyInfo(ModelMap model, MyInfoForm form,BindingResult result ) {
        validator.validate (form,result);
        if (result.hasErrors()) {
            model.put("commandName", "myInfoForm");
            return "contactEdit";
        }
         //save some stuff
        return "redirect:viewMyInfo";
    }

}

Ответы [ 2 ]

9 голосов
/ 17 сентября 2010

Вы должны предоставить справочные данные, такие как CountryDivisions, с помощью аннотации @ModelAttribute.Это имеет большое преимущество, так как вам не нужно повторять себя снова и снова и предоставлять одни и те же данные в нескольких методах.

Для вашего примера я бы привел что-то вроде этого:* Это дает вашим представлениям доступ к атрибуту модели с именем "countryDivisions", который содержит список объектов "CountryDivison", предоставляемых методом обслуживания из вашей "countryDivisionService".

1 голос
/ 17 сентября 2010

Почему бы просто не сделать

    if (result.hasErrors()) {
        model.put("commandName", "myInfoForm");
        loadReferenceData(model);
        return "contactEdit";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...