您的位置:首页 > 编程语言 > Java开发

springmvc+ajax实现省市区三级联动以及406 (Not Acceptable)的解决办法

2018-01-30 17:54 489 查看
我做一个小的测试实现功能

最主要是说一下遇到的问题:

我先用的spring3.2的包但是遇到好多的问我问题,

(1)首先就是不能使用*.htm,*.html的地址后缀;

(2)这个会报406 (Not Acceptable)的错误:

办法:1.你可以换成4.0的包,然后就能支持*.htm的后缀了;2.看看你的json包导进去没jackson-annotations-2.7.0.jar  ,jackson-core-2.7.0.jar ,jackson-databind-2.7.0.jar; 

3.在spring配置文件中加入以下代码

<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
</list>
</property>
</bean>


下面是实现的代码:

1.首先创建页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>个人网站</title>
<script type="text/javascript">

function select(){
var praviceID = $("#sheng").val();
$.ajax({
url:"sheng.htm",
type:"POST",
//contentType:"application/json",
dataType:"json",
data:{"pravice":praviceID},
success:function(data){
$("#shi").html("");//先清空
//遍历传过来的list集合
$.each(data,function(i,sheng){

a463
$("#shi").append(
"<option value='"+sheng.id+"'>"+sheng.name+"</option>"
)
})
}
});
};
function select1(){
var shengID = $("#shi").val();
$.ajax({
url:"sheng1.htm",
type:"POST",
dataType:"json",
data:{"sheng":shengID},
success:function(data){
$("#qu").html("");
$.each(data,function(i,qu){
$("#qu").append(
"<option value='"+qu.id+"'>"+qu.name+"</option>"
)
})
}

});
};
</script>
</head>
<body data-spy="scroll" data-target=".navbar" data-offset="50">
<div>
<h1>省市区三级联动</h1>
省份:
<select id="sheng" onchange="select()">
<option value="">-请选择-</option>
<!-- 循环显示所有省份 -->
<c:forEach items="${list}" var="pv" >
<option value="${pv.id}">${pv.name}</option>
</c:forEach>
</select>
城市:
<select id="shi" onchange="select1()">
<option value="">-请选择-</option>
</select>
区域:
<select id="qu">
<option value="">-请选择-</option>
</select>
</fieldset>

</div>

</body>
</html>

2.后台代码:

 controller层:
@Controller
public class LoginController {

@Autowired
private ShengService ss;
@Autowired
private PraviceService ps;
@RequestMapping("/wel.htm")
public String getWel(HttpServletRequest req)
{
log.info("初始化页面.................");
List<Pravice> list = ps.getId();
req.setAttribute("list", list);
return "index";
}
@RequestMapping("/sheng.htm")
@ResponseBody
public List<Sheng> getS(@RequestParam(value = "pravice")int praviceID){
System.out.println(praviceID);
List<Sheng> name = ss.getSheng(praviceID);
for(Sheng s:name){
System.out.println(s.getName());
}
return name;
}
@RequestMapping("/sheng1.htm")
@ResponseBody
public List<Sheng> getQ(@RequestParam(value = "sheng")int shengID){
System.out.println(shengID);
List<Sheng> name = ss.getSheng(shengID);
for(Sheng s:name){
System.out.println(s.getName());
}
return name;
}
}

dao层

public interface ShengDao {

@Select("select id,name,father from sheng where father=#{father}")
List<Sheng> getSheng(int father);

}
public interface PraviceDao {
@Select("select id,name from pravice")
List<Pravice> getPravice();

}

service层
@Service
public class ShengService {

@Autowired
private ShengDao sd;

public List<Sheng> getSheng(int id){
List<Sheng> s = sd.getSheng(id);
return s;
}

}
@Service
public class PraviceService {

@Autowired
private PraviceDao pd;

public List<Pravice> getId(){
List<Pravice> list = new ArrayList<Pravice>();
list = pd.getPravice();
return list;
}

}

实体类
实体类可以创建一个,不需要弄成两个或者多个。
public class Sheng {
private int id;
private String name;
private int father;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFather() {
return father;
}
public void setFather(int father) {
this.father = father;
}

}
public class Pravice {
private int id;
private String name ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}
数据库结构大家看着实体类自己做一下。

4.效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: