Я обещаю, что у меня это получилось.Spring MVC 4 и Thymeleaf - Предупреждение об обновлении страницы
У меня есть приложение Spring MVC 4, которое использует Thymeleaf для сбора данных о форме и помещает их в базу данных. Работает очень хорошо, за исключением того, что я хочу, чтобы мое приложение покидало пользователя на странице формы после того, как они нажали кнопку отправки, чтобы они могли продолжать редактирование.
Каждый раз, когда они нажимают кнопку «Отправить», вызывается контроллер и возвращает представление, которое заставляет страницу обновляться. Я хотел бы устранить обновление, а также добавить предупреждение для подтверждения сохранения.
Итак, я начал работать над преобразованием формы в AJAX и понял, что это победит цель использования Thymeleaf. Тимелеар уже сопоставляет поля формы с бэкэндом и делает это хорошо, так зачем заменить этот механизм?
Итак, есть способ, чтобы контроллер Spring MVC обрабатывал запрос отправки, но не возвращал новый экземпляр представления?
Я попытался не возвращать представление, но это вызвало ошибку, потому что ничего не было сопоставлено с атрибутом модели. Я попытался использовать @ResponseBody и вместо этого возвратил данные, но это вызвало отображение JSON на веб-странице, и я не мог понять, как получить эту базу данных и что-то сделать с ней.
Я также попытался найти способ подключиться к кнопке отправки, чтобы попытаться вызвать javascript preventDefault(), но ему не повезло.
Большое спасибо за ваши предложения ...
Вот мой код контроллера, очень прост:
@SessionAttributes("adminFormAjax")
@Controller
public class TestController
{
@Autowired
private AdminDataRepository rep;
@RequestMapping(value="/admin_ajax", method=RequestMethod.GET)
public String adminFormAjax(Model model)
{
AdminData ad = rep.findById(1L);
// If there is no configuration record, create one and assign the primary key as 1.
if(ad == null)
{
ad = new AdminData();
ad.setId(1L);
}
model.addAttribute("adminFormAjax", ad);
return "adminFormAjax";
}
@RequestMapping(value="/admin_ajax", method=RequestMethod.POST)
public @ResponseBody AdminData adminSubmit(@ModelAttribute("adminFormAjax") AdminData ad, Model model)
{
// rep.save(ad);
model.addAttribute("adminFormAjax", ad);
return ad;
}
}
Хорошо, я пробовал это, но я не мог заставить javascript вызываться, когда я нажимаю кнопку отправки. Тимелеаф каким-то образом перехватывает функцию, вызванную кнопкой отправки? –
Нет, помните, что thymeleaf - это рендеринг на стороне сервера. Если javascript не работает, то это как-то связано с кодом javascript. Если вы хотите поднять новый вопрос, показывающий проблемы, которые у вас есть (включая показ кода), и я могу взглянуть. – Aeseir
Спасибо Aeseir, последующий вариант находится по адресу http://stackoverflow.com/questions/31592122/thymeleaf-page-refresh-followup-now-with-ajax –