You are constructing a new BindingResult whereas there is already one provided (and used in the background) by Spring. Simply adding the BindingResult to the method right after the @ModelAttribute annotated parameter gives you this. You can then get the model from the result and use that to construct a ModelAndView.
Also observe that the ModelAttribute name (currently Tag) doesn't match the one used in the form (tag). Those 2 should match.
Something like the following should work.
@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST)
public ModelAndView editTag(@ModelAttribute("tag") Tag tag, BindingResult result) {
ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required");
if (result.hasErrors()) {
return new ModelAndView("tag.edit", result.getModel());
}
tagDao.merge(tag);
return new ModelAndView("redirect:/tags/listTags.htm");
}