当使用Ajax处理表单时,模型addAttribute()无法加载到相应的JSP标记

时间:2016-12-14 11:57:58

标签: java ajax jsp spring-mvc java-ee-mvc

我正在尝试使用Ajax post-method处理表单,我的控制器中的所有内容都能正常工作,除非我尝试调用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: 


    }});}

以下是我在一个名为index.jsp的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控制器的简化版本

@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";
}

1 个答案:

答案 0 :(得分:0)

这是因为您正在执行form submit并使您的网页成为reload

因此,在您关注ajax之后,您需要prevent页面提交和重新加载的默认行为,以便您可以看到具有相关属性的更新模式。

$("#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是视图jsp时,它会再次呈现页面,再次为您重新创建一个新模式。因此,如果您使用void进行modal并使用addAttribute()修改@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); } ,那么您将在jsp视图中看到它。

pixman