@GetMapping("/update/{id}")
public String updateEvent(@PathVariable("id") long id, Model model) {
Event event = eventService.findOne(id);
model.addAttribute("events",event);
model.addAttribute("venues", venueService.findAll());
return "events/update";
}
// @GetMapping("update")
public String UUUpdateEvent(@RequestBody @Valid @ModelAttribute Event event, BindingResult errors,
Model model, RedirectAttributes redirectAttrs) {
if (errors.hasErrors()) {
return "events/update";
}
// change the parameter in .safe() to update
eventService.save(event);
redirectAttrs.addFlashAttribute("ok_message", "Event updated.");
return "redirect:/events";
}
这是我控制器的代码,通过id搜索到需要更新的那个event并把它放到model里,我的想法是这样在接收html表单发送过来的events变量需要的各项数据后可以直接用.save(event)来更新这个已存在的event,但结果却是新建了一个event,原来的那个完全不变,请问我是哪里写错了吗?
我在findOne之后试过直接通过event.set()更改数值并用.save(event)来更新,这样的更新方式是可行的,但我需要html的表单内容来进行更新。
附update.html:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layouts/default}">
<head>
<title>Update</title>
</head>
<body>
<div layout:fragment="content">
<h1>Update a existing event</h1>
<form action="#" th:action="@{/events}" th:object="${event}" method="post">
<!--
<div class="form-group" th:classappend="${#fields.hasErrors('event')}? has-error">
<label>Select the Event</label>
<select th:field="${event}" class="form-control" required>
<option th:each="e : ${events}" th:value="${e.id}" th:text="${e.name}"></option>
</select>
<p class="text-danger" th:if="${#fields.hasErrors('event')}" th:errors="*{event}">errors</p>
</div>
-->
<div class="form-group" th:classappend="${#fields.hasErrors('name')}? has-error">
<label for="name">Rename event</label>
<input class="form-control" type="text" name="name" id="name" autofocus="autofocus" required/>
<p class="text-danger" th:if="${#fields.hasErrors('name')}" th:errors="*{name}">errors</p>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('date')}? has-error">
<label for="date">New date of event</label>
<input class="form-control" type="date" name="date" id="date" autofocus="autofocus" required/>
<p class="text-danger" th:if="${#fields.hasErrors('date')}" th:errors="*{date}">errors</p>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('time')}? has-error">
<label for="time">New time of event</label>
<input class="form-control" type="time" name="time" id="time" autofocus="autofocus" required/>
<p class="text-danger" th:if="${#fields.hasErrors('time')}" th:errors="*{time}">errors</p>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('description')}? has-error">
<label for="description">Description of event</label>
<textarea class="form-control" name="description" id="description"/></textarea>
<p class="text-danger" th:if="${#fields.hasErrors('description')}" th:errors="*{description}">errors</p>
</div>
<div class="form-group" th:classappend="${#fields.hasErrors('venue')}? has-error">
<label>Event Venue</label>
<select th:field="${event.venue}" class="form-control" required>
<option th:each="v : ${venues}" th:value="${v.id}" th:text="${v.name}"></option>
</select>
<p class="text-danger" th:if="${#fields.hasErrors('venue')}" th:errors="*{venue}">errors</p>
</div>
<button class="btn btn-primary" type="submit"><i class="fas fa-bookmark" aria-hidden="true"></i> Save</button>
<a class="btn btn-warning" role="button" href="/events"><i class="fas fa-ban" aria-hidden="true"></i> Cancel</a>
</form>
</div>
</body>
</html>