刚写的时候 在Action中,写个方法然后在写个String类型的返回值,以告诉 Struts2将跳转到哪个页面。这样写,使用response.getPrintWirter.write()打印json数据 老是在客户端的$.post的那个回调函数里面拿不到。思来想去才发现在相应的Action中方法写了返回值,然后使用Ajax技术请求后,它跳到你在struts.xml配置的哪个相应的result里面去了。
后来干脆把相应的那个Action里面的相应方法的返回值 写成void了,后来就可以了。
下面你们看下我今天下午写的这个代码吧。
JSP页面主要代码(由于主要为了测试,就把js一起写在jsp页面里面了):
<script type="text/javascript">
$(document).ready(function()
{
$.post("getProvinces",function(data,textStatus)
{
var dataObj=eval("("+data+")");
for(var i=0;i<dataObj.length;i++)
{
var $option=$("<option></option>");
$option.attr("value",dataObj[i].id);
$option.text(dataObj[i].name);
$("#proviceId").append($option);
}
},"json") ;
$("#proviceId").bind("change",function()
{
var ids=this.value;
if(ids==""){return;}
$.post("getCitys",{pid:ids},function(data,textStatus)
{
var dataObj=data;
$("#cityId option[value!='']").remove();
for(var i=0;i<dataObj.length;i++)
{
var $option=$("<option></option>");
$option.attr("value",dataObj[i].id);
$option.text(dataObj[i].name);
$("#cityId").append($option);
}
},"json")
});
});
</script>
省份:
<select name="province" id="proviceId">
<option value="">----请选择---</option>
</select>
市区:
<select name="city" id="cityId">
<option value="">----请选择---</option>
</select>
下面看下Struts2里面相应的Action代码:
public class ActionAction extends ActionSupport {
private int pid=1;
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
/**
*数据初始化(由于主要为了测试,没有连接数据库了,直接将数据保存在java类的静态变量里面)
*/
public void init() {
ListDate.dateC.clear();
Provice p = null;
City c = null;
for (int i = 1; i <= 5; i++) {
p = new Provice();
p.setId(i);
p.setName("广西" + i);
for (int j = 1; j < 6; j++) {
c = new City();
c.setId(j);
c.setName("桂林" + j);
p.getListC().add(c);
}
ListDate.dateC.add(p);
}
}
public void getProvinces() {
init();
List<Provice> listP = new ArrayList<Provice>();
listP = ListDate.dateC;
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "listC" });
JSONArray listparray = JSONArray.fromObject(listP, config);
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.write(listparray.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
public void getCitys() {
System.out.println("进来了吗dd:"+pid);
try {
init();
List<Provice> listP = new ArrayList<Provice>();
listP = ListDate.dateC;
List<City> listC = new ArrayList<City>();
for (Provice p : listP) {
if (p.getId() == this.pid) {
listC = p.getListC();
break;
}
}
JSONArray jsonarry = JSONArray.fromObject(listC);
HttpServletResponse response = ServletActionContext.getResponse();
System.out.println(jsonarry);
response.setCharacterEncoding("utf-8");
response.getWriter().write(jsonarry.toString());
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
下面看下struts.xml里面的主要配置:
<action name="getProvinces" class="com.action.ActionAction" method="getProvinces">
</action>
<action name="getCitys" class="com.action.ActionAction" method="getCitys">
</action>
主要关键代码就这些。主要为了提供给在这方面初学者。望高手勿喷!