Я нахожусь в процессе создания простого приложения с Spring Mvc и тимелеафом, и в настоящее время я думаю о том, какие функции я хочу реализовать, но я точно не знаю, как это сделать.
Скажем, у меня есть модельный класс Person. Обычно у меня есть форма и контроллер, в которых я передаю объект new person и сохраняю его с помощью JPA.
Нет проблем, но что, если я хочу иметь страницу, на которой я даю некоторую основную информацию о человеке, а затем нажимаю кнопку «Далее» и предоставляю дополнительную информацию. Затем снова нажмите «Далее», просмотрите данные и нажмите «Сохранить»?
Я не использовал Thymeleaf, но обычно эту проблему можно решить, используя следующие методы или что-то подобное:
1.) Сохраните незавершенные данные в базе данных, используя ту же схему или другую схему для этого (или в сеансе; в общем смысле, сохраните их где-нибудь на стороне сервера). Проблема в том, как избавиться от заброшенных данных, когда пользователь не перешел до конца.
2.) Перетащите данные со страницы на страницу с параметрами запроса. Если запросы имеют тип POST, то только в теле POST, если они типа GET, то в качестве параметров запроса. Проблема в том, что он не очень чистый.
3.) Не выполняйте полностраничные запросы. Решите это с помощью некоторого внешнего решения с использованием Javascript. В зависимости от приложения это может быть, а может и нет.
4.) Выполняйте полностраничные запросы, но все же решайте их во внешнем интерфейсе, используя локальное хранилище или хранилище сеансов. Такие же проблемы, как и при хранении данных в сеансе на стороне сервера.
Вы можете сделать это, интегрировав Spring Webflow в свой проект. Webflow - это, по сути, обширная часть WebMvc. Webflow имеет некоторую конфигурацию, где вам нужно начать и куда вы должны пойти. Если у вас есть 5 страниц, и вы хотите, чтобы все эти данные были помещены в базу данных одним процессом, то Webflow вам поможет. Еще одно преимущество заключается в том, что вы можете добавить проверку на определенных страницах, и это означает, что у вас есть пять моделей, и все эти модели будут работать в одном потоке. Подробнее, https://projects.spring.io/spring-webflow/