2015-07-21 3 views
2

Я обещаю, что у меня это получилось.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; 
    } 

} 

ответ

2

Так thymeleaf воздаст страницу как HTML и отправляет его клиенту для отображения, если вы хотите иметь возможность отправлять данные формы контроллеру без смены страниц, вам необходимо включить Javascript.

Вам обязательно нужно использовать javascript/ajax, чтобы опубликовать содержимое формы и сохранить страницу как есть.

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

+0

Хорошо, я пробовал это, но я не мог заставить javascript вызываться, когда я нажимаю кнопку отправки. Тимелеаф каким-то образом перехватывает функцию, вызванную кнопкой отправки? –

+0

Нет, помните, что thymeleaf - это рендеринг на стороне сервера. Если javascript не работает, то это как-то связано с кодом javascript. Если вы хотите поднять новый вопрос, показывающий проблемы, которые у вас есть (включая показ кода), и я могу взглянуть. – Aeseir

+0

Спасибо Aeseir, последующий вариант находится по адресу http://stackoverflow.com/questions/31592122/thymeleaf-page-refresh-followup-now-with-ajax –

Смежные вопросы