servlet:
public void getCities(HttpServletRequest request,HttpServletResponse response) throws IOException{
response.setContentType("text/xml;charset=utf-8");
//ie禁用缓存
response.setHeader("Cache-Control", "no-cache");
String proId = request.getParameter("proId");
System.out.println("proId:"+proId);
//获取spring容器
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
//从spring容器中,取出了 UniversityServiceInter 类型的bean
CityService cityService = (CityService) ctx.getBean("cityService");
List<City> cities = cityService.findCities(Integer.valueOf(proId));
//去掉死循环 json实现有加载set的问题 由于很复杂 暂时放弃研究
// JsonConfig jsonConfig = new JsonConfig();
// jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
//
// JSONArray json = JSONArray.fromObject(cities,jsonConfig);
// out.println(cities.toString());
//使用xml传递信息
//在js中未找到转换的解决办法(将字符串转换成xml) 值查找到ie的方法 360不详 我用的360 由于时间原因 暂时放弃研究
// String res = "<allCities>";
// for (int i = 0; i < cities.size(); i++) {
// City city = cities.get(i);
// res += "<city><id>" + city.getId() + "</id><name><![CDATA["
// + city.getName() + "]]></name></city>";
// }
// res += "</allCities>";
//XMLWriter out2 = new XMLWriter(response.getOutputStream());
//最终选择在servlet中完成字符串到xml的转换
Document doc = listToDocument(cities);
XMLWriter out = new XMLWriter(response.getOutputStream());
out.write(doc);
//out.write(res);
out.close();
}
private Document listToDocument(List<City> list){
Document document = DocumentHelper.createDocument();
Element regions = document.addElement("allCities");
for(City r : list){
Element region = regions.addElement("city");
region.addElement("id").setText(r.getId()+"");
region.addElement("name").setText(r.getName());
}
return document;
}
ajax:
function getCities(){
getXmlHttpRequest(); //具体方法就不写了 都懂
var proId = $("#pro").val();
alert("proId"+proId);
xmlhttp.open("get","regServlet?tag=getCities&proId="+proId);
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
/* var str = xmlhttp.responseText;
alert("back");
var map = new Map();
//var content = "";
for(var i = 0;i<json.length;i++){
//content +="<tr><td>"+json[i].id+"</td><td>"+json[i].pname+"</td><td>"+json[i].price+"</td><td>"+json[i].pdate+"</td></tr>"
map.put(json[i].id,json[i].name);
}
//document.getElementById("tby").innerHTML = content;*/
var map = new Map();
// alert(xmlhttp.responseText);
// var cities = new ActiveXObject("Microsoft.XMLDOM");//Microsoft.XMLDOM MSxml2.DOMDocument 这里是上面提到的ie解决方案
// cities.loadXML(xmlhttp.responseText);
//var cities = xmlhttp.responseXML.getElementsByTagName("city");
//cities.getElementsByTagName("city");
var cities = xmlhttp.responseXML.getElementsByTagName("city");
//var content = "#{";
for (var i = 1; i <= cities.length; i++) {
//最终使用option添加的方法
$("#city").append("<option value='"+cities[i - 1].childNodes[0].childNodes[0].data+"'>"
+cities[i - 1].childNodes[1].childNodes[0].data+"</option>");
//实践证明: 直接将数据加入list中无效
// if(i!=1){
// content += ",";
// }
// content += cities[i - 1].childNodes[0].childNodes[0].data+":'"+cities[i - 1].childNodes[1].childNodes[0].data+"'";
}
//content +="}";
//$("#city").attr("list",content);
//$("#city").attr("listKey","key");
//$("#city").attr("listValue","value");
}
}
xmlhttp.send();
}
最后strts2 关于select标签的使用:
<s:select id="city" class="write_date2" list="#{ }" headerKey="0" headerValue="城市" ></s:select>
list的必须这么写 如果写 list="" 则报错