我已经使用我的Spring Controller(provincia)中的内容填充了一个列表,我还有另一个对象(profile2),我需要从(provincia)获取所选值...以及我的表单国家/地区中的其他值等...
@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>
但我找不到任何有关如何提取与列表中的值对应的选定键和值(th:select)并将其返回到控制器(或将其移动到具有provincia有线对象)。在Post之后,我在我的控制器中获得了provincia的空值。
当我在HTML中包含一个(select th:field =&#34; * {provincia}&#34;)时,它会给我一个错误说...出现意外错误(type = Internal Server Error) ,status = 500)。 执行处理器期间出错&org.thymeleaf.spring4.processor.attr.SpringSelectFieldAttrProcessor&#39; (editprofileabout4:120) 无效的财产&'; provincia&#39; bean类[java.util.ArrayList]:Bean属性&quot; provincia&#39;不可读或getter方法无效:getter的返回类型是否与setter的参数类型匹配?
感谢您的帮助 - 任何文件都表示赞赏。
答案 0 :(得分:0)
您需要从th:object
元素中删除select
属性,并且只为表单保留一个属性,因为正如Thymeleaf文档所述:
然后表单上的进入标签后,没有其他th:object属性可以 指定。这与HTML表单不可能的事实一致 嵌套。
th:object
属性需要引用一个表单支持bean,即可以保存您通过表单发送的任何值的对象,例如省报
目前您正在尝试访问List对象的属性 provincia ,而该对象根本不存在。