如何使用 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,该对象根本不存在。
我已经用 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,该对象根本不存在。