首页 > 解决方案 > 将对象从 HTML 模板传回控制器

问题描述

我有以下 HTML 块。我想将对象“jobDTO”传递回控制器“/deleteJob”方法。无论我做什么,我都会得到空对象。

<th:block th:if="${jobDTO != null}" th:each="jobDTO: ${allJobDTOs.get(jobGroup)}">
                                    <div id="accordion2" style="margin-bottom: 3px;">
                                        <div class="card" id="headingOne">
                                            <div class="card-header" style="padding: 0">
                                                <h5 class="mb-0">
                                                    <button class="btn btn-link" data-toggle="collapse" th:attr="data-target='#accordion2_'+${jobDTO.identity.name}"
                                                            aria-expanded="true" aria-controls="collapseChild" >
                                                        <p class="font-weight-bold custom-p identity-black" > Job Identity &nbsp;&nbsp;</p>
                                                        <p class="custom-p" style="padding-left: 52px;" th:text="${jobDTO.identity.group} +' , ' + ${jobDTO.identity.name}"></p>

                                                    </button>
                                                </h5>
                                            </div>
                                            <div th:id="'accordion2_'+${jobDTO.identity.name}" class="collapse" aria-labelledby="headingOne" data-parent="#accordion2">
                                                <div class="card-body">

                                                    <dl class="row">
                                                        <dt class="col-lg-3">Trigger List</dt>
                                                        <dd class="col-sm-9">
                                                            <th:block th:each="trigger: ${jobDTO.triggers}">
                                                                <p><b>nextFireTime</b> &nbsp;&nbsp; <span th:text="${trigger.nextFireTime}"> </span></p>
                                                                <hr>
                                                            </th:block>
                                                        </dd>
                                                    </dl>
                  <!-- important part.. how to pass the jobDTO object back to the controller -->
                                                    <form id="form2" action="#" th:action="@{/deleteJob}" th:object="${jobDTO}"  th:method="post">
                                                        <input type="text" th:value="*{identity.name}" th:field="*{identity.name}" hidden/>
                                                        <button type="submit" value="Submit" class="btn btn-danger btn-sm"  >Delete Job</button>
                                                    </form>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </th:block>

我的控制器相关部分是:

@GetMapping(value = "/deleteJob")
public String deleteJobPage(Model model) {
    model.addAttribute("jobDTO", new ScheduleJobDTO());

    //Returns the Home page with the prepared model attributes
    return "Home";
}
// =================
@PostMapping("/deleteJob")
public String deleteJob(@ModelAttribute final ScheduleJobDTO jobDTOReturn, BindingResult bindingResult, Model model) {

// I want to receive the jobDTO object here      
schedulerService.deleteJobFromGroup(jobDTOReturn.getIdentity().getGroup(), 
    jobDTOReturn.getIdentity().getName());
    return "redirect:/";
}

我在这里想念什么?

标签: springspring-bootspring-mvcthymeleaf

解决方案


我认为您的输入标签中有错误,请尝试以下操作:

<input type="text" th:value="${jobDTO.identity.name}" th:field="*{identity.name}" hidden/>

推荐阅读