我的问题是我无法获得下拉列表选择的值,错误是:
字段“ admin”上的对象“ agence”中的字段错误:拒绝的值[1];代码[typeMismatch.agence.admin,typeMismatch.admin,typeMismatch.com.example.demo.entities.Adminstrateur,typeMismatch]; ;默认消息[无法将类型'java.lang.String'的属性值转换为属性'admin'的必需类型'com.example.demo.entities.Adminstrateur';嵌套异常是java.lang.IllegalStateException:无法将属性“ admin”的类型“ java.lang.String”的值转换为所需的类型“ com.example.demo.entities.Adminstrateur”:
addagence.html:
<form action="#" th:action="@{/addAgence}" th:object="${agence}" method="post">
<div class="row">
<div class="form-group col-md-8">
<label for="adresse" class="col-form-label">Adresse</label> <input type="text" class="form-control" name="adresse">
</div>
<div class="form-group col-md-8">
<label for="ville" class="col-form-label">Ville</label> <input type="text" class="form-control" name="ville">
</div>
<div class="form-group col-md-8">
<label for="admin" class="col-form-label">Administrateur</label>
<select
class="form-control" th:field="*{admin}">
<option value="">Select Admin</option>
<option th:each="a: ${admins}"
th:value="${a.codeUtilisateur}"
th:text="${a.nom}"></option>
</select>
</div>
<div class="col-md-8">
<input type="submit" class="btn btn-primary" value="Add Agence" >
</div>
<div class="form-group col-md-8"></div>
</div>
</form>
A
dminController.java:
@GetMapping("signupAgence")
public String showSignUpForm(Agence agence,Model model) {
List<Utilisateur> admins=adminServices.getAdmins();
model.addAttribute("admins", admins);
return "addagence";
}
@RequestMapping(value = "/addAgence")
public String addAgence(Model model, Agence ag) {
Agence agence = adminServices.addAgence(ag);
model.addAttribute("agence", agence);
return "redirect:/agence";
}
答案 0 :(得分:0)
在th:field="*{admin}"
中,您将所选选项的值(由于选择选项的值不是对象,因此为String)绑定到Admin对象。这是错误的,这是导致您出错的原因。
您必须更改命令对象,以便它可以接收管理员 ID 。稍后,您可以在后端中搜索完整的admin对象,或者可以在隐藏的输入中添加所有管理信息,并在提交表单时在控制器中恢复它们(这仍然不会使您不必将选择绑定到String上。字段)。
答案 1 :(得分:0)
如果您的管理对象具有“ id”属性(并且应该),则应进行以下更改:
th:value="${a.codeUtilisateur}"
对此:
th:value="${a.id}"