嗨,我是Spring和Thymeleaf开发的新手,我试图了解如何在Thymeleaf和控制器之间传递数据。我知道如何以其他方式传递数据。使用我从控制器传递到视图的数据,我正在构建一个表,其中有两列(一列是用于选择服务的按钮,另一列是服务名称),并且与该行一样多的行我有。我想要做的就是获取所选服务的ID(当按下添加按钮时,我只能按一次单个按钮,但是我可以按所有其他按钮),并使用它进行一些后端处理(现在)我只是想打印值)。另一件事是,一旦单击该按钮,它会将我重定向到索引页面,但在URL的末尾添加/ addService,而我不希望这样做(我想保留在具有相同URL的同一页面中)。 我怎么解决这个问题?
index.html
<table id="html-table" class="table table-hover table-clean table">
<thead>
<tr>
<th>Select</th>
<th>Service</th>
</tr>
</thead>
<tbody>
<tr th:each="serviceOffered : ${servicesOffered}">
<td>
<form action="#" th:value="${serviceOffered.id}" th:object="${serviceOffered}" th:action="@{/addService}" method="POST">
<button type="submit" class="btn" name="${serviceOffered.id}">
<i class="fas fa-plus"></i>
</button>
</form>
</td>
<td th:value="${serviceOffered.name}" th:text="${serviceOffered.name}"></td>
</tr>
</tbody>
</table>
控制器
@RequestMapping(value="/addService", method = RequestMethod.POST)
public ModelAndView addService(@Valid ServiceOffered serviceOffered, BindingResult bindingResult){
ModelAndView modelAndView = new ModelAndView();
System.out.println("VALUE " + serviceOffered.getId());
modelAndView.setViewName("/index");
return modelAndView;
}
答案 0 :(得分:0)
您的表单具有类型为submit
的按钮。当您按下按钮时,它会提交表单。在您的控制器中,您重定向到index
页。如果要单击该按钮而只发送服务的值而不重新加载页面,则需要使用use jquery的ajax
调用。 docs这是ajax调用的示例代码。
$.ajax({
url: '/your url',
method: 'post',
data: 'your data'
}).then(function(response){
// do what ever you want with your response.
})
记住:您需要在控制器类的方法上添加@Responsebody
注释。