Spring MVC отображает таблицу в коллекцию, но Spring Page был выведен - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь отправить всю таблицу в форме, чтобы пользователь мог запросить несколько обновлений одновременно.

Это было рассмотрено довольно много раз. Это один из лучших примеров . И это входит в большую и интересную деталь о @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);

Проблема возникает, когда я нажимаю кнопку отправки, чтобы отправить таблицу обратно.

Исходный пост:

DispatcherServlet - POST "/ updateProvider", параметры = {content [0] .enabled: [Y], content [0] .serviceType: [MESSAGING], content [0] .serviceInstance: [Q10], content 1 .enabled: [Y], содержимое 1 .serviceType: [MESSAGING], содержимое 1 .serviceInstance: [Q10], содержимое 2 .enabled: [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. Но это не вызывает никаких сеттеров. Я не надеялся на setEnabled, это даже не имеет смысла. addContent казался немного более многообещающим, но на самом деле я просто добавил их, чтобы посмотреть, смогу ли я выяснить, что ищет ModelAttribute. Но я не могу понять, как сказать Spring, чтобы сделать отображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...