プロジェクトで Spring MVC と Spring フォーム検証を使用しています。オブジェクトモデルにクラスという名前がありGroup
、それを編集するためのフォームを作成しました。
形
<spring:url var="saveGroup" value="/teacher/groups/save"/>
<form:form action="${saveGroup}" method="post" modelAttribute="group">
<form:hidden path="id"/>
<div id="nameDiv" class="control-group">
<form:label path="title">Title:</form:label>
<form:input path="title"/>
<form:errors path="title"/>
</div>
<div id="specDiv" class="control-group">
<form:label path="title">Specialty:</form:label>
<form:select path="specialty">
<form:options items="${specialties}" itemValue="id" itemLabel="title"/>
</form:select>
</div>
<div class="center">
<spring:url var="groups" value="/teacher/groups"/>
<input class="btn btn-primary" type="submit" value="Save"/>
<a class="btn" href="${groups}"> Cancel </a>
</div>
</form:form>
コントローラ
@Controller
@RequestMapping("/teacher/groups")
public class GroupsController {
@Autowired
private GroupService groupService;
@Autowired
private SpecialtyService specialtyService;
@ModelAttribute("group")
public Group setGroup(Long id) {
if (id != null) {
return groupService.read(id);
} else {
return new Group();
}
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Specialty.class, "specialty",
new SpecialtyEditor(specialtyService));
binder.setValidator(new GroupValidator());
}
@RequestMapping("")
public ModelAndView groups() {
return new ModelAndView("teacher/groups/list", "groups",
groupService.list());
}
@RequestMapping("/edit")
public ModelAndView editGroup() {
return new ModelAndView("teacher/groups/edit", "specialties",
specialtyService.list());
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String saveGroup(@Valid Group group, BindingResult result) {
if (result.hasErrors()) {
return "forward:/teacher/groups/edit";
}
groupService.update(group);
return "redirect:/teacher/groups";
}
}
検証が失敗した場合に、フォームの適切な動作を設定したいと考えています。つまり、状態を保存する必要がありますが、検証エラー メッセージのみを表示する必要があります (JavaScript を使用して検証する場合など)。「forward:/teacher/groups/edit」はeditGroup()
、保存されたオブジェクトgroup
とresult
. しかし、検証に失敗すると、フォームがリロードされ、編集済みの開始状態が表示さgroup
れます。エラーも保存された変更もありません。どうすればそれを正しく行うことができますか?
ありがとう!