如何使用 Thymeleaf 和 Spring 引导从下拉列表中提取所选值

how to extract the selected value from a dropdown list with Thymeleaf and Spring boot

我已经用 Spring 控制器 (provincia) 的内容填充了一个列表,我还有另一个对象 (profile2),我需要从 (provincia) 获取 selected 值。 .. 以及我所在国家/地区的其他值等...

@RequestMapping(value = "/editprofileabout4", method = RequestMethod.GET)
public ModelAndView editProfileAbout4(ModelAndView modelAndView) {

    Usuario usuario = getUsuario();
    Profile profile = profileService.getUserProfile(usuario);
    Profile2 profile2 = profile2Service.getUserProfile2(usuario);
    List<Provincia> provincia = provinciaService.readAllProvincia();

    Profile webProfile = new Profile();
    webProfile.safeCopyFrom(profile);

    modelAndView.getModel().put("edituserprofile2th", usuario);
    modelAndView.getModel().put("editprofile2about2th", profile2);
    modelAndView.getModel().put("editprovincia2th", provincia);
    modelAndView.setViewName("editprofileabout4");

    return modelAndView;
}

@RequestMapping(value = "/doeditprofileabout4", method = RequestMethod.POST)
public ModelAndView editProfileAbout4(ModelAndView modelAndView, @Valid Profile2 profile2, @Valid Provincia provincia,  BindingResult result) {

    modelAndView.setViewName("editprofileabout4");

    System.out.println("       !!!!!!!!!!!!! PROFILE2a: " + profile2.getBirthdate());
    System.out.println("       !!!!!!!!!!!!! PROFILE2b: " + profile2.getGender());
    System.out.println("       !!!!!!!!!!!!! PROFILE2d: " + profile2.getProvincia());
    System.out.println("       !!!!!!!!!!!!! PROFILE2x: " + provincia.toString());

    Usuario usuario = getUsuario();
    Profile2 profile = profile2Service.getUserProfile2(usuario);
    profile.setCountry(profile2.getCountry());
    profile.setGender(profile2.getGender());
    profile.setBirthdate(profile2.getBirthdate());
    profile.setProvincia(provincia);

    if (!result.hasErrors()) {
        profile2Service.save(profile);
        modelAndView.setViewName("redirect:/editprofileabout4");
    }
    return modelAndView;

}

在我的 HTML 中,我有:

<form class="sky-form" id="sky-form4" action="#" th:object="${editprofile2about2th}" th:action="@{/doeditprofileabout4}" method="post">

    <section>
    <div class="col-lg-3">
            <select class="form-control" th:object="${editprovincia2th}" id="ddl" name="ddl">
            <option value="" th:text="#{editprofile.about4.provincia}">Seleccionar Provincia</option>
            <option th:each="dropDownItem : ${editprovincia2th}"
                                                    th:value="${dropDownItem.id_provincia}"
                                                    th:text="${dropDownItem.provincia}"></option>
            </select>
        </div>
    </section>

但我找不到任何关于如何提取与列表中的值相对应的 selected 键和值 (th:select) 并将其放回控制器的工作示例(或将其移动到具有 provincia wired 对象的 de profile2 对象中)。在 Post.

之后,我在我的控制器中得到了 provincia 的空值

当我在 HTML 中包含一个 ( select th:field ="*{provincia}") 时,它给我一个错误提示...出现意外错误(类型=内部服务器错误,状态=500)。 处理器执行期间出错 'org.thymeleaf.spring4.processor.attr.SpringSelectFieldAttrProcessor' (editprofileabout4:120) bean class [java.util.ArrayList] 的 属性 'provincia' 无效:Bean 属性 'provincia' 不可读或具有无效的 getter 方法: getter的return类型与setter的参数类型匹配吗?

感谢您的帮助- 感谢任何文档。

您需要从 select 元素中删除 th:object 属性,只为表单保留一个属性,因为如 Thymeleaf 文档所述:

Once inside the tag, no other th:object attribute can be specified. This is consistent with the fact that HTML forms cannot be nested.

然后,表单上的

th:object 属性需要引用一个 form-backing bean,即可以保存您通过表单发送的任何值的对象,例如

目前您正在尝试访问 List 对象的 属性 provincia,该对象根本不存在。