我有一个表格,其中包含一个选择,用于按ID列出系统中的所有教师,但无法正常工作。
这是表格的代码部分
和相应的路径控制器请求
我正在使用Thymeleaf和Spring Boot,因此'pr'对应于教师资料库的变量名称。
<form th:action="@{/professor/updateProfessor/}" method="post" th:object="${professor}">
<div class= "form-group">
<label th:for = "id">Id</label>
<select th:field="*{id}">
<option
th:value = "${id}"
th:text = "${professor.id}">
</option>
</select>
</div>
<input type = "submit" value = "Add Professor">Save</button>
</form>
@GetMapping(value = {"/selecionaProfessor"})
@ResponseBody
public ModelAndView professorSelecao(){
ModelAndView atualizaProfessor = new ModelAndView("/atualizaProfessor");
atualizaProfessor.addObject("Add Professor");
return atualizaProfessor;
}
@PostMapping(value = {"/selecionaProfessor"})
@ResponseBody
public ModelAndView selecaoProfessor(){
ModelAndView pagSucesso = new ModelAndView("/pagSucesso");
pagSucesso.addObject(pr.findAll());
return pagSucesso;
}
答案 0 :(得分:0)
在您的控制器上,按照以下说明发送教授列表。在这里,您将教授名单与“ professorList”相关联:
model.addAttribute("professorList", pr.findAll());
然后访问您的百里香叶中“ professorList”上方的内容(类似于):
<option th:each="professor: ${professorList}" th:value="${professor}"> </option>
不是完整的代码,但我希望您有个入门的想法。
答案 1 :(得分:0)
首先什么不起作用?因为我看到很多可能无法正常工作的东西,也许是因为我没有看到全部代码,或者我猜到了一些东西,让我们看看
使用进入控制器时
localhost:8080/professor/selecionaProfessor
您希望使用正确的表格吗? (下一个代码)
<form th:action="@{/professor/updateProfessor/}" method="post" th:object="${professor}">
<div class= "form-group">
<label th:for = "id">Id</label>
<select th:field="*{id}">
<option
th:value = "${id}"
th:text = "${professor.id}">
</option>
</select>
</div>
<input type = "submit" value = "Add Professor">Save</button>
</form>
因为这是正确的,您的方法有问题:
@GetMapping(value = {"/selecionaProfessor"})
@ResponseBody
public ModelAndView professorSelecao(){
ModelAndView atualizaProfessor = new ModelAndView("/atualizaProfessor");
atualizaProfessor.addObject("Add Professor");
return atualizaProfessor;
}
您会收到一条错误消息:
Neither BindingResult nor plain target object for bean name 'professor' available as request attribute
因此您缺少添加Key Professor和List的功能,因此需要进行以下更改:
atualizaProfessor.addObject("Add Professor");
类似:
atualizaProfessor.addObject("professor", someListOfProfessorHereFromTheService (List<Professor>));
,并且如果您的profesor对象具有您在表单上拥有的属性,那么它应该可以正常工作。
现在让我们假设它以前已经起作用,而错误不是那样。
当您输入表单时,如果看到以下内容:
form th:action="@{/professor/updateProfessor/}"
您正在使用updateProfessor,但在您的控制器上看不到
@PostMapping(value = {"/selecionaProfessor"})
所以我认为您应该更改html页面或控制器内的url映射,并与错误1相同,使用键和值映射对象,并将列表迭代到html中,如我在第一个错误中所示
希望有帮助