ssm的框架使用json传递前端的表单数据,controller处理之后无法再进行页面的跳转

ssm的框架使用json传递前端的表单数据,controller处理之后无法再进行页面的跳转,json会接收controller的return值。如此一来,只能由js负责跳转了,但是访问不到web-inf下的jsp文件,应该如何

前端代码
<form class="form-horizontal" >
<label for="firstname" class="col-sm-2 control-label">用户ID</label>
<div class="col-sm-10">
  <input type="text" class="form-control" id="user_id" placeholder="请输入用户ID">
</div>
<div class="col-sm-offset-2 col-sm-10">
  <button type="button" id="select" class="btn btn-default">查找</button>
</div>

$(function(){
$("#select").click(function() {
$.ajax({
url : "peopleSelect",
type : "POST",
dataType:"json",
contentType : "application/json;charset=UTF-8",
<!-- 向后端传输的数据 -->
data : JSON.stringify({
id : $("#user_id").val(),
}),
success:function(result) {
<!-- 处理后端返回的数据 -->
var message= JSON.stringify(result);
$("#select-box").html("查询成功" + message);
},
error:function(result){
$("#select-box").html("查询失败");
}
});
});
});
后台代码
Controller

这里主要用@RequestBody转换接受的JSON为对象,用@ResponseBody转换返回的对象为JSON。
有两种接受前端数据的方式,一种使用Map接受,一种使用实体类进行接收,使用Map接受的方法为:

@RequestMapping("/peopleSelect")
@ResponseBody
public People peopleSelect(@RequestBody Map map) {
//使用map.get方法得到JSON中id对应的值
long id = Long.parseLong(map.get("id"));
//查找对应id的用户信息
People people = peopleService.getById(id);
//返回用户信息,要使用@ResponseBody将返回值转换为JSON
return people;
}
使用实体类接受的话,要求实体类中有对应的属性,如People中有id,name,age属性,只能接受键名为id,name,age的JSON(可以不全有,但不能有People中没有的属性),方法为:
@RequestMapping("/peopleSelect")
@ResponseBody
public People peopleSelect(@RequestBody People requestPeople ) {
//使用requestPeople.getId方法得到JSON中id对应的值
long id = requestPeople.getId();
//查找对应id的用户信息
People people = peopleService.getById(id);
//返回用户信息,要使用@ResponseBody将返回值转换为JSON
return people;
}
最后说几个遇到的问题:

一.点击查找按钮后,页面会快速刷新,看不到返回结果

提交按钮的type一定要设置为button,不要使用submit,因为submit会默认点击提交,而ajax也会提交,这就产生了ajax的返回结果还没看清就因为submit的提交而刷新了页面。

二.后台查询结果没问题,却总是调用ajax的error回调函数

ajax对返回数据的要求很严格,一定要是严格的JSON数据返回才会进行success的回调,只要有一条数据不是严格的JSON格式就会调用error的回调函数,最好将查询结果封装为一个类,每次查询返回这个类,类中包含查询结果或者错误信息。

如果你是直接跳转的,是肯定访问不到这个链接的。

你可以这样,你让js去访问一个业务逻辑 不要直接去访问那个info下的页面,那个业务逻辑的内容就是转发到你要跳转的页面,这样你能理解么

假如你想访问index.jsp但是他在INFO下
那么你就让js去访问 /项目/showIndex
然后方法的内容就是
@Requestmapping("showIndex")
public String(){
return "index";
}
思路就是这样的等于说是把所有的页面访问权全部由后台处理

想跳转一个页面还不是很简单,前端js也可以跳转啊,location.hre="xx",xx是你想跳转的地址,如果此地址是在WEB-inf下那你将xx修改为一个控制器或servlet
由控制器去返回jsp

ajax传递的数据只有一个id的话,你想后端处理好数据转到下一个页面,就没必要用ajax了,直接用a标签,,
你也可以把@ResponseBody去掉试试

你需要查看你的spring-mvc配置返回的路径是否是对的,并且需要注意有无斜杠的差别。