如果只需要返回一个字符串或其他文本信息,则: <result type="stream"> <param name="contentType">text/html</param> <param name="inputName">inputStream</param> </result> 在action里面: public String login1() throws IOException{ ByteArrayOutputStream bos = new ByteArrayOutputStream(); bos.write("login".getBytes()); inputStream = new ByteArrayInputStream(bos.toByteArray()); return "success"; } 并且加上inputstream的get/set方法即可,在页面直接ajax的result就是结果 $.post("client!login1.action", { username: username, password: password }, function(result){ alert("Data : " + result); }); 方法1: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 开发阶段设置 --> <constant name="struts.devMode" value="true" /> <constant name="struts.serve.static.browserCache " value="false" /> <constant name="struts.configuration.xml.reload" value="true" /> <!-- 开发阶段设置 --> <!-- <package name="json-default" extends="struts-default"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult" /> </result-types> <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/> </interceptors> </package> --> <package name="/base" extends="struts-default" namespace="/base"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult" /> </result-types> <action name="Province" class="two.SupplyDetailAction" method="province"> <result type="json"> <!-- <param name="root">result</param> --> </result> </action> <action name="City" class="two.SupplyDetailAction" method="city"> </action> </package> <package name="ns" extends="struts-default" namespace="/p"> <action name="index"> <result type="freemarker" name="input">/index.ftl</result> </action> </package> </struts>
<html> <head> <script type="text/javascript" src="${base}/jquery.js"> </script> <script > $(document).ready(function(){ var province=$("#province"); var city=$("#city"); var provinceurl="${base}/base/Province.action"; $.post(provinceurl,{code:"province"},function(dataObj){ <#-- 因为在struts.xml中type="json" 所以后台action中的属性 会变为json类型的dataObj如{name:tch,age:22......} 所以在页面端通过对dataObj进行操作,如dataObj.name dataObj.age dataObj.provinces拿到的是一个后台的List,在前天则是一个对象数组,所以 通过遍历即可$.each(dataObj.provinces,function(index,value){})--> $.each(dataObj.provinces,function(index,item){ var tempOption = document.createElement("option"); tempOption.value = item.provinceId; tempOption.innerHTML = item.provinceName; province.append(tempOption); }); },"json"); province.change(function(){ if($("#province option:selected").val() ==""){ return; } city.empty(); city.append("<option value='-1'>请选择省份</option>"); var params={provinceCode:$("#province option:selected").val()}; $.post("${base}/base/City.action",params,function(dataObj){ $.each(dataObj.cities,function(index,item){ var tempOption = document.createElement("option"); tempOption.value = item.cityId; tempOption.innerHTML = item.cityName; city.append(tempOption); }); },"json"); }); }); </script> </head> <body> <form action="${base}/act.action" id="productForm" name="productForm" method="post"> <input type="text" onclick="ff();"> <div> 省份:<select name="province" id="province"> <option value="">请选择省份</option> </select> 城市:<select name="city" id="city"> <option>请选择城市</option> </select> </div> </form> </body> </html>
通过访问http://localhost:8080/WebTest/p/index.action访问index.ftl页面,页面加载完之后,已经完成了对省份的ajax请求,再改变省份的选择,就对城市也进行了ajax请求
但是这里仅仅实现了ajax请求json数据,其余的功能以及存在的问题还需自己修正和完善.
情况2:
如果:
<result type="json"> <param name="root">result</param> </result>
即加入了
<param name="root">result</param>
那么就要作出相应的修改,因为这句话的意思是说将ajax请求返回的数据存储在了result变量里面,所以,要在action里面加入string类型的result,添加get/set方法,并且在execute或其他相应的方法里面return success之前要对result赋值、初始化。
public String province() { Province p = new Province(); p.setProvinceId("1"); p.setProvinceName("河南"); provinces.add(p); Province p2 = new Province(); p2.setProvinceId("2"); p2.setProvinceName("河南2"); provinces.add(p2); //下面这两句话就是对result的初始化,即将要返回给页面的数据放在result中。。 JSONArray jsonArray2 = JSONArray.fromObject(provinces); this.result = jsonArray2.toString(); return SUCCESS; }
然后在页面里面
$.post(provinceurl,{code:"province"},function(msg){ //相应的在页面上,对于返回的数据要先进行处理,通过eval()将数据转化为json类型 dataObj = eval("("+msg+")"); $.each(dataObj,function(index,item){ var tempOption = document.createElement("option"); tempOption.value = item.provinceId; tempOption.innerHTML = item.provinceName; province.append(tempOption); }); },"json");
即可。
但是不建议使用方法2,因为这样多做了一些无用功