当前位置: 首页 > 知识库问答 >
问题:

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

汪弘毅
2023-03-14

我已经用来自我的spring控制器(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有线对象的de profile2对象)的工作示例。在发布后,我在控制器中为provincia获取空值。

当我在HTML中包含一个(select th:field=“*{provincia}”)时,它会给我一个错误,说...出现错误(Type=内部服务器错误,状态=500)。执行处理器“org.thymeleaf.spring4.processor.attr.springSelectFieldattrProcessor”(EditProfileabout4:120)bean类[java.util.ArrayList]的无效属性“provincia”:bean属性“provincia”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?

谢谢你的帮助-任何文件都很感激。

共有1个答案

昝唯
2023-03-14

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

一旦进入标记,就不能指定其他th:object属性。这与HTML表单不能嵌套的事实是一致的。

表单上的th:object属性需要引用表单支持bean,即可以保存通过表单发送的任何值的对象,例如provincia

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

 类似资料:
  • 我的问题是无法得到下拉列表选择的值,错误是: 字段“admin”上对象“agence”中的字段错误:拒绝值[1];代码[TypeMismatch.agence.admin,TypeMismatch.admin,TypeMismatch.com.example.demo.Entities.AdminStrateur,TypeMismatch];;默认消息[无法将“java.lang.String”类

  • 我有一个下拉列表,客户端必须选择一个值,然后它将在mysql db中持久化好的,我这样做了,但我希望当客户端选择一个值时,我得到该值,然后我执行if语句示例: 如果选择的值为:CIN,则为compte。setcomptenumber(25364138);就像那样 这是我的控制器: 我的html:

  • 我想使用硒从选择字段中选择一个选项 HTML格式如下: 我尝试了以下方法: 我收到了这个错误: 硒。常见的例外情况。NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:”//*[@id=“Enable”]/option[value=“0”]}

  • 下面给出了一段表示下拉列表的代码。我需要在此下拉列表中选择日期值,由<代码> 以下方法无效 1。)使用“按导入组织选择”选择此值。openqa。硒。支持用户界面。选择 控制台显示: 元素应该是“选择”,但应该是“选项” 2.)首先单击下拉列表以显示要选择的选项,然后单击该选项。 控制台显示: 调试元素缺少可访问的名称:id:类型,标记名:选择,类名:文本输入ng原始ng未触及ng有效ng范围 3.

  • 问题内容: 我需要使用字符串列表中的所有值填充下拉列表。 控制器类 我不知道从哪里开始HTML,所以我从这里开始 我的html / controller应该如何将列表的所有元素添加为下拉选项? 提前致谢! 问题答案: 这就是我填充下拉列表的方式。我认为这可能有助于你了解它。 Controller Model View

  • 问题内容: 下面给出的是一段代码,表示下拉列表。我需要在此下拉列表中选择 日期 值,表示为 遵循方法无效。 1.)使用“ 选择” 通过导入 org.openqa.selenium.support.ui.Select* 选择此值 * 控制台显示: 元素应该是“选择”但是“选项” 2.)首先单击下拉菜单以显示要选择的选项,然后单击该选项。 控制台显示: DEBUG元素缺少可访问的名称:id:类型,ta