我保证,我已经在Google上搜索了很多次。
我有一个使用Thymeleaf收集表单数据并将其存入数据库的Spring MVC 4应用程序。它运行得非常好,但我希望我的应用程序在用户点击提交按钮后留在表单页面,以便他们可以继续编辑。
每次他们点击提交按钮时,控制器被调用并返回视图,这会导致页面刷新。我想消除刷新,并添加一个确认保存的提示框。
因此,我开始着手将表单提交转换为AJAX,但意识到这将破坏使用Thymeleaf的目的。Thymeleaf已经将表单字段映射到后台bean中,并且执行得很好,那么为什么要替换该机制呢?
那么,有没有一种方法可以使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;
}
}