Я всегда использовал @Valid
и BindingResult
для проверки полей формы. Теперь, используя Ajax, на основе статьи this, нельзя использовать BindingResult
вместо или дополнительно к HttpServletResponse
, потому что это приведет к неправильному запросу (код ошибки HTTP 400).Spring Form Ajax Request + Hibernate Validation
Как подтвердить мои поля формы сейчас?
@RequestMapping(value = "/save.html", params = "json", method = RequestMethod.POST)
public @ResponseBody Map<String, ? extends Object> saveJSON(@RequestBody Location location, /* BindingResult result, */ HttpServletResponse response)
{
return Collections.singletonMap("foo", "foobar");
}
Это был старый путь без AJAX:
@RequestMapping(value = "/save.html", method = RequestMethod.POST)
public String save(@ModelAttribute("location") @Valid Location location, BindingResult result, Map<String, Object> map)
{
Location l;
if ((l = service.findByTitle(location.getTitle())) != null)
{
if (location.getId() != l.getId())
{
result.addError(new FieldError("location", "title", messageSource.getMessage("Unique.location.title", null, null)));
}
}
if (result.hasErrors())
{
return "locationform";
}
service.save(location);
return "redirect:/locations/index.html";
}
EDIT
Пробовал, но нет errors
члена в результате который содержит true
при выходе из формы незаполненного (это должно привести к сообщение @NotEmpty Constraint)
@RequestMapping(value = "/save.html", params = "json", method = RequestMethod.POST)
public @ResponseBody Map<String, ? extends Object> saveJSON(@RequestBody Location location, HttpServletResponse response, Map<String, Object> map)
{
BindingResult result = new BeanPropertyBindingResult(location, "");
if (result.hasErrors()) map.put("errors", true);
map.put("foo", "foobar");
return map;
}
Какая версия Весна вы используете 3,0 или 3,1? – Ralph
@Ralph я использую весну 3.1 – dtrunk