使用Thymeleaf和Spring boot从下拉列表中提取所选值

时间:2019-09-23 13:59:26

标签: html spring-boot thymeleaf

我的问题是我无法获得下拉列表选择的值,错误是:

字段“ 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";
    }

2 个答案:

答案 0 :(得分:0)

th:field="*{admin}"中,您将所选选项的值(由于选择选项的值不是对象,因此为String)绑定到Admin对象。这是错误的,这是导致您出错的原因。

您必须更改命令对象,以便它可以接收管理员 ID 。稍后,您可以在后端中搜索完整的admin对象,或者可以在隐藏的输入中添加所有管理信息,并在提交表单时在控制器中恢复它们(这仍然不会使您不必将选择绑定到String上。字段)。

答案 1 :(得分:0)

如果您的管理对象具有“ id”属性(并且应该),则应进行以下更改:

th:value="${a.codeUtilisateur}"

对此:

th:value="${a.id}"