我有一个在GET期间使用RequestMapping检索的JSP表单。 页面的JSP页面结构如下所示:
<div id="myDiv">
<script>
function update() {
update_fn(formId, ... more parameters); // this is a function defined in a .js file, this submits the form
}
</script>
<form:form ... >
<button id="myButtonUniqueIDWithCurrentTime" onclick="update()">OK</button>
</form:form>
</div>
现在,当单击该按钮时,将调用udpate_fn(),该命令使用$ .ajax发送POST请求。 RequestMapping包含使用@ModelAttribute
和@Valid
注释的表单。
如果BindResult没有错误,那么我将数据推送到数据库,否则我将相同的表单发送回客户端。这就是它的样子。
@RequestMapping(value = "/formSubmit", method = RequestMethod.POST)
public ModelAndView addData(
@ModelAttribute("editForm") @Valid BackingForm form,
BindingResult result, Model model) {
boolean success = false;
String message = "";
Map<String, Object> m = new HashMap<String, Object>();
if (form == null) {
form = new BackingForm();
} else {
if (result.hasErrors()) {
success = false;
message = "Please fix the errrors noted above";
} else {
try {
MyEntity entity = form.getWrappedEntity();
entityRepository.addData(entity);
form = new BackingForm(); // why is empty form not visible in JSP
success = true;
message = "Data Successfully Added";
} catch (EntityExistsException ex) {
ex.printStackTrace();
success = false;
message = "Entity Already exists.";
} catch (Exception ex) {
ex.printStackTrace();
success = false;
message = "Internal Error. Please try again or report a Problem.";
}
}
}
m.put("editForm", form);
m.put("success", success);
m.put("message", message);
ModelAndView mv = new ModelAndView("editForm");
mv.addObject("model", m);
return mv;
}
这是发布请求的Javascript。
function updateGeneric(form, resultDivId, url) {
var data = $("#" + form.getAttribute("id")).serialize();
$.ajax({
type : "POST",
url : url,
data : data,
success : function(response) {
console.log(response);
$("#" + resultDivId).replaceWith(response);
}
});
}
如上面的代码所示当成功添加数据时,我会执行以下操作:
form = new BackingForm(); // why is empty form not visible in JSP
success = true;
message = "Data Successfully Added";
现在当我将这个表单放在ModelAndView中然后用ModelAndView replace'editForm.jsp'替换渲染的视图时,为什么页面中没有显示正确的表单? 我在jsp页面中获取了正确的消息值,成功。 但是,即使将表单设置为新表单,表单也会包含旧提交的值。
注意我在POST后没有重定向。我只是使用jquery替换HTML片段。
你能指出我的代码有什么问题吗?做同样的事情可能是一种巧妙的方法吗?
提前致谢!