Spring MVC映射表到集合,但输出了Spring Page

时间:2019-04-28 15:55:05

标签: spring-mvc thymeleaf

我正在尝试以表单的形式提交整个表,以便用户可以一次请求多个更新。

已经讨论了很多次了。 This is one of the best examplesAnd this详细介绍了@ModelAttribute。

但是,我的问题变得如此令人讨厌。该表以Thymeleaf呈现的Spring数据页面对象开始。我非常确定问题是@ModelAttribute与字段名不匹配。但是几个小时后,我的想法已经用光了。

我的表单:

<form action="#" th:action="@{/updateProvider}" th:object="${providerPage}" method="post">
<table   >
<thead>
<tr>
    <th th:text="#{msg.enabled}" />
    <th th:text="#{msg.type}" />
...
</tr>
</thead>
<tbody>
<tr th:each="restProvider, i : ${providerPage.content}"  >

    <td th:style="'text-align: center;'" /> <input type="text" th:field="*{content[__${i.index}__].enabled}" />
    <td th:text="${restProvider.type}" />
    <td/> <input type="text" th:field="*{content[__${i.index}__].serviceType}" />
...
</tr>
</tbody>
</table>
<input type="submit" value="Update" />

提供者页面是 org.springframework.data.domain.Page 。它已添加到模型中,并完美显示了所有这些功能。

Page<RestProvider> providerPage = providerService.findPaginated(PageRequest.of(currentPage - 1, pageSize));

    model.addAttribute("providerPage", providerPage);

当我按下“提交”按钮将表格发回时,就会出现问题。

原始POST是:

  

DispatcherServlet-POST“ / updateProvider”,参数= {content [0] .enabled:[Y],content [0] .serviceType:[MESSAGING],content [0] .serviceInstance:[Q10],content {{ 3}}。启用:[Y],内容1。serviceType:[MESSAGING],内容1。serviceInstance:[Q10],内容1。启用:[Y],内容2。serviceType:[MESSAGING],内容2。serviceInstance:[Q10]}

我尝试了很多控制器签名,但我仍然认为这是最接近的签名:

@RequestMapping(value = "/updateProvider", method = RequestMethod.POST)
public String updateProvider(@ModelAttribute("content") RestProviderList providers) {

RestProviderList是:

public class RestProviderList {

private List<RestProvider> restProviders;

public RestProviderList() {
    this.restProviders = new ArrayList<RestProvider>();
}

public List<RestProvider> getRestProviders() {
    return restProviders;
}

public void setRestProviders(List<RestProvider> restProviders) {
    this.restProviders = restProviders;
}

public void addContent(RestProvider restProvider) {
    this.restProviders.add(restProvider);
}

public void setEnabled(String enabled) {
    logger.debug("Enabled:{}", enabled);
}

RestProvider是Spring JPA模型。用它弄乱职位似乎毫无意义。我将添加所有映射,所有输出都可以出站,因此该表可以准确地表示其获取器/设置器。

@ModelAttribute忠实地在RestProvidersList上调用null构造函数。但是它没有调用任何setter。我对setEnabled并不抱有希望,甚至没有任何意义。 addContent似乎更有希望,但实际上我只是添加了这些内容,以查看是否可以找到ModelAttribute想要的内容。但是我不知道如何告诉Spring进行映射。

0 个答案:

没有答案