我正在建立一个课程预订网站。 现在正在开发"编辑"功能。 作为管理员,我可以编辑现有页面并保存它。 我试图写它,但有以下错误:
Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "editKursInfo"]
我的控制器:
@GetMapping("/editKursInfo/{id}")
public String editKursInfo(Model model, @PathVariable("id") long id,
HttpSession session) {
Kurs kurs = data.getKursById(id);
model.addAttribute("kurs", kurs);
model.addAttribute("edit", kurs);
return "editKursInfo";
}
@PostMapping("/editKursInfo/{id}")
public String editKursInfo(Model model,
@Valid @ModelAttribute("edit") Kurs kurs,
BindingResult bindingresult ,@PathVariable("id") long id
) {
data.saveKurs(kurs);
return "redirect:/editKurs";
}
和 html:
<form action="editKursInfo" method="POST"
th:object="${edit}">
<table width="100%" align="center">
<tr>
<td>
<table width="100%">
<tr>
<tr> <td align="left" >Kurs Name</td>
<td>
<input th:field="*{kursName}"
type="text"
align="left"
class="form-control"
style="width:250px;"
th:errorclass="is-invalid"
id="kursNameInput"
value=""/><br>
<div th:if="${#fields.hasErrors('kursName')}" th:errors="*{kursName}" class="invalid-feedback"> </div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<button type="submit" id="submit" class="btn btn-primary" style="float: right;margin-right: 85px; width: 150px;" >submit</button>
</form>
<form>
标记的action
属性没有@PostMapping
所需的id
路径变量。
调整为使用类似以下内容的内容:
<form th:action="@{/editKursInfo/{id}(id=${edit.id})}"
method="POST"
th:object="${edit}">
PS:在您的@GetMapping
方法中,您在 2 个键下具有相同的 Java 对象:
model.addAttribute("kurs", kurs);
model.addAttribute("edit", kurs);
没有必要这样做。
PS 2:最好不要在URL中使用edit
。我建议使用/kurse/{id}
或/kurseinfo/{id}
.您正在编辑某些内容或只是查看某些内容的事实由 GET 或 POST 映射决定。