我正在尝试使用 Ajax 后置方法处理表单, Controller 中的所有内容都工作正常,除非我尝试调用 model.addAttribute("jspTagName", string);它不起作用,实际上什么也没有发生。 这是我的 Ajax 处理程序的代码
$("#filtring-form").submit(function(e){
var url = "/MessageCenterStatistics/results";
$.ajax({
type: "POST",
url: url,
data: $("#filtring-form").serialize(),
success: function(data){
//TODO:
}});}
下面是我的JSP页面代码,位于一个名为index.jsp的jsp文件中,当然我只是向您展示一个简单的案例
<form id="filtring-form">
<label>From date </label><input type="Date" name="fromDate" require/>
<label>Up to date </label><input type="Date" name="toDate" required/>
<button type="submit" id="dosomething">Get Statistics</button>
<button type="reset">Reset </button>
</form>
<div>
<p id="tag1">${something}</p>
</div>
我只是在这里展示我的 Java Controller 的简化版本
@RequestMapping(value = "/results", method = RequestMethod.POST)
public String processform(Model model, @RequestParam("fromDate") String fromDate,
@RequestParam("toDate") String toDate) {
String s="Hello World!";
model.addAttribute("something", s);
return "index";
}
最佳答案
这是因为您正在执行form
submit
,它会使您的页面重新加载
。
因此,在使用 ajax 时,您需要阻止
页面提交和重新加载的默认行为,以便您可以看到具有相关属性的更新模式。
$("#filtring-form").submit(function(e){
// prevent defaults
e.preventDefault();
$.ajax({
type: "POST",
url: "/MessageCenterStatistics/results",
data: $("#filtring-form").serialize(),
success: function(data){
//TODO:
}
});
return false;
}
此外,您不应该从处理程序方法中返回任何内容。使其void
而不是返回string
。当您返回字符串并且 index
是 View jsp 时,它会再次重新呈现页面,为您重新创建一个新的模式。因此,如果您将其设为 void
并使用 addAttribute()
修改 modal
,那么您将在 jsp View 中看到它。
@RequestMapping(value = "/results", method = RequestMethod.POST)
public void processform(Model model, @RequestParam("fromDate") String fromDate,
@RequestParam("toDate") String toDate) {
String s="Hello World!";
model.addAttribute("something", s);
}
关于ajax - 使用Ajax处理表单时,模型addAttribute()无法加载到相应的JSP标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41142060/