首页 > 解决方案 > 从持久的对象列表中加载选择框,并使用该选择框值从选择框中加载完整对象

问题描述

我有一个带有我的业务对象的休眠表:活动(ID,名称,描述,...)。使用 Thymeleaf,我正在预加载一个带有活动名称的选择框。一旦用户选择了一个名称并且我尝试将活动 ID 提交给控制器,或者由于我有一个包含所有活动对象的数组,我只会从选择框中传递选定的对象。

您认为最好的方法是什么?

<div class="form-group blu-margin">
<form th:object="${campaign}" th:action="@{/campaign}" method="post">
    Select the campaign you would like to execute : 
    <select
        class="form-control" id="dropCampaign" name="dropCampaign">
        <option value="0">select campaign</option>
        <option th:each="INcampaign : ${campaigns}"
                th:value="${INcampaign.id}" 
                th:text="${INcampaign.name}">
        </option>
    </select>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

标签: springthymeleaf

解决方案


阅读各种文章并尝试不同的事情,我想我明白了。分享我的解决方案以防它可以帮助某人。诀窍是在选择标签中添加 id 和 name。然后,当然,在您的控制器中,您需要在方法签名中添加 @RequestParam Long id。

但请注意,这不是执行此操作的常用方法。更标准的方法是调用诸如 /campaign/{id}/edit 之类的 URL。但我不确定安全性,因为并非所有用户都可以访问所有广告系列,所以我不想将 URL 暴露给这种编辑可能性(即使我确信你可以以某种方式保护它)。对我来说,这种方式似乎更容易。

<form name="f" th:action="@{/campaign}" th:object="${campaign}" method="post">
<select id="id" name="id">
    <option value="0">select campaign</option>
    <option th:each="campaign : ${campaigns}"
            th:value="${campaign.id}" 
            th:text="${campaign.name}"
            >
    </option>
</select>
<button type="submit" class="btn btn-primary">Submit</button>


推荐阅读