使用Spring

时间:2019-02-12 10:14:25

标签: java html spring thymeleaf

嗨,我是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;
}

1 个答案:

答案 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注释。