我的网址有问题。 在系统中,我显示一些用户信息,url是:showUserInfo。 我可以单击一个按钮,它会显示一个对话框并允许创建一个新用户。 我做了一个ajax调用:createUser。
我的问题是,当我执行此调用时,url对话框中的url更改,如果我刷新页面,则会出现一些问题,因为我们有createUser url但是有showUserInfo。
@RequestMapping(method = RequestMethod.GET, value = "/showUserInfo")
public String userView(Model model, Locale locale) {
model.addAttribute("userList", userBeanMap);
model.addAttribute("userBeanForm", new UserBeanForm());
return userView;
}
@RequestMapping(method = RequestMethod.POST, value = "/createUser")
public String createUser(Model model, @ModelAttribute UserBeanForm userBeanForm, BindingResult result) {
...
...
}
$('#createUser').dialog({
autoOpen: false,
height: 660,
width: 715,
modal: true,
buttons: {
Save: function() {
$('#addUserForm').submit();
}
},
Cancel: function() {
$('#addUserForm').trigger("reset");
$(this).dialog("close");
}
},
close: function() {
$('#addUserForm').trigger("reset");
}
});
<form:form id="#addUserForm" action="${addUserUrl}" modelAttribute="userBeanForm">
...
</form>
有没有办法避免这种行为?
答案 0 :(得分:0)
我不完全确定你在问什么,所以澄清会有所帮助。特别是,当你说: “如果我刷新页面,会出现一些问题,因为我们有createUser url但是有showUserInfo。”
你看到的问题是什么?我打算你想避免双重发布,所以使用PRG模式可以解决你的问题: http://en.wikipedia.org/wiki/Post/Redirect/Get
但是,如果你正在进行AJAX调用,情况应该不是这样。如果你想在提交后避免刷新,你可以代替调用表单的提交,做这样的事情吗?
Save: function() {
$.ajax({
type: "POST",
url: "/createUser",
data: $("#addUserForm").serialize(),
success: function(data)
{
// javascript to update page
}
});
}
},
有关JQuery ajax的更多信息:http://api.jquery.com/jQuery.ajax/ 如果帖子应该更新,你可以在服务器端返回一个json,并让javascript成功函数解析它并相应地更新页面。
如果您确实想要进行刷新,那么: “/ createUser”url是否返回了与get不同的内容?如果没有,您可以更改帖子处理程序以返回重定向到GET页面:
@RequestMapping(method = RequestMethod.POST, value = "/createUser")
public String createUser(Model model, @ModelAttribute UserBeanForm userBeanForm, BindingResult result) {
...
...
return "redirect:/showUserInfo"
}
如果您想存储帖子创建的一些数据并使用Spring 3.1,请查看flash属性: http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-flash-attributes
您可以更改您的帖子处理程序,并调整您的获取处理程序以某种方式使用该数据或将其传递给视图:
@RequestMapping(method = RequestMethod.POST, value = "/createUser")
public String createUser(Model model, @ModelAttribute UserBeanForm userBeanForm, BindingResult result, RedirectAttributes redirectAttributes) {
...
...
// add data for get handler to use
redirectAttributes.addFlashAttribute("someString", "stringValue");
redirectAttributes.addFlashAttribute("someInt", 10);
return "redirect:/showUserInfo"
}
我没有机会对此进行实际测试,但希望它有效。