大家好,我在用struts2+json+jquery做省市区三级联动代码如下:
Action里:
/**
 * 获取省份
 */
public String getProvince() {
List<Province> provinceList = userService.getProlist();
System.out.println(provinceList);
JSONArray jsonArray = JSONArray.fromObject(provinceList);
try {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(jsonArray.toString());
} catch (IOException e) {
e.printStackTrace();
}
return null;
} /**
 * 获取城市
 */
public String getCityByPid() {
System.out.println("---该行已执行---");
System.out.println(CProvince);
List<City> cityList = userService.findCityByProId(CProvince);
System.out.println("---该行已执行1---");
System.out.println(cityList);
JSONArray jsonArray = JSONArray.fromObject(cityList);
System.out.println("---该行已执行2---");
try {
response.setContentType("text/html;charset=UTF-8");
System.out.println("---该行已执行3---");
response.getWriter().print(jsonArray.toString());
System.out.println("---该行已执行4---");
} catch (IOException e) {
e.printStackTrace();
}
return null;
} /**
 * 获取区
 */
public String getTownByCid() {
List<Address> townList = userService.findAddByCityId(cityFId);
JSONArray jsonArray = JSONArray.fromObject(townList);
try {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(jsonArray.toString());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
选取了省之后,报这个错:
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:801)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:519)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Thread.java:713)不知道是什么原因,还请各位不吝赐教,在下不胜感激!!

解决方案 »

  1.   

    检查下你的网页端,在选择了省份后,给服务器端发了个什么样的请求过来。最好用HttpWatcher之类的工具,拦截住整个HTTP报文来看看。
      

  2.   

    前端是这样写的:
    test.jsp:
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>三级联动</title>
    <script language="JavaScript" src="jquery-1.4.2.js"></script>
    <script type="text/javascript" src="my.js"></script>
    </head>
    <body>
    <select id="province" name="province">
    <option value="">
    请选择省
    </option>
    </select>
    <select id="city" name="city">
    <option value="">
    请选择市
    </option>
    </select>
    <select id="town" name="town">
    <option value="">
    请选择区
    </option>
    </select>
    </body>
    </html>
    my.js:
    $(document).ready(function() {
    /* 获取省份 */
    $.post("userAction_getProvince.action", function(data) {
    var jsonObj = eval("(" + data + ")");
    for ( var i = 0; i < jsonObj.length; i++) {
    var $option = $("<option></option>");
    $option.attr("value", jsonObj[i].CProvince);
    $option.text(jsonObj[i].PName);
    $("#province").append($option);
    }
    });
    /* 根据省份获取城市 */
    $("#province").change(function() {
    $.post("userAction_getCityByPid.action", {
    CProvince : $("#province").val()
    }, function(data) {
    /* 清空城市 */
    $("#city option[value!='']").remove();
    /* 清空乡镇 */
    $("#town option[value!='']").remove();
    var jsonObj = eval("(" + data + ")");
    for ( var i = 0; i < jsonObj.length; i++) {
    var $option = $("<option></option>");
    $option.attr("value", jsonObj[i].cityFId);
    $option.text(jsonObj[i].CFName);
    $("#city").append($option);
    }
    });
    });
    /* 根据城市获取乡镇 */
    $("#city").change(function() {
    $.post("userAction_getTownByCid", {
    cityFId : $("#city").val()
    }, function(data) {
    /* 清空乡镇 */
    $("#town option[value!='']").remove();
    var jsonObj = eval("(" + data + ")");
    for ( var i = 0; i < jsonObj.length; i++) {
    var $option = $("<option></option>");
    $option.attr("value", jsonObj[i].cityId);
    $option.text(jsonObj[i].CName);
    $("#town").append($option);
    }
    });
    });
    });
      

  3.   

    是不是一个页面上不能调用两次response.getWriter()方法啊?