您的位置:首页 > Web前端 > JQuery

使用jQuery框架的ajax技术,在Struts2返回json格式的数据

2013-05-15 20:23 666 查看
    刚写的时候 在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>  

主要关键代码就这些。主要为了提供给在这方面初学者。望高手勿喷!

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