struts2 返回json数据(结合Extjs)

来源:互联网 发布:最穷的时候知乎 编辑:程序博客网 时间:2024/05/17 07:42

本例使用struts2版本 struts-2.1.8.1

首先导入必要的jar包:

配置web.xml:
<filter> 
        <filter-name>struts2</filter-name> 
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
</filter>  
<filter-mapping> 
        <filter-name>struts2</filter-name> 
        <url-pattern>*.action</url-pattern>  
</filter-mapping> 
接着书写Action类:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.opensymphony.xwork2.Action;


public class Test {
 public Map responseJson;
 public Map getResponseJson() {
  return responseJson;
 }
 public void setResponseJson(Map responseJson) {
  this.responseJson = responseJson;
 }
 
 public String getList(){
  Map<String, Object> map = new HashMap<String, Object>();
  List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  for(int i=0;i<3;i++){
   Map<String, Object> m = new HashMap<String, Object>();
   m.put("id", i);
   m.put("name", "Mic"+i);
   list.add(m);
  }
  map.put("rows", list);
  map.put("totalCont", 3);
  this.setResponseJson(map);
  return Action.SUCCESS;
 }
}

最后配置struts.xml文件:
<package name="jsonTest" extends="json-default">
  <action name="test" class="bll.Test" method="getList">   
   <result type="json">
    <param name="root">responseJson</param>
   </result>
  </action>
 </package>

struts.xml配置说明:

1,<result type="json"> 这句说明返回类型为json,所以extends设置为"json-default"。

2,<param name="root">responseJson</param> responseJson对应返回数据的根,如果省略这行返回的结果如下:
 {"list":"success","responseJson":{"rows":[{"name":"Mic0","id":0},{"name":"Mic1","id":1},{"name":"Mic2","id":2}],"totalCont":3}}

 如果设置了root,结果如下:
{"rows":[{"name":"Mic0","id":0},{"name":"Mic1","id":1},{"name":"Mic2","id":2}],"totalCont":3} 
以上步骤做好后,我们就可以调用该action了:

Js代码 
Ext.onReady(function(){  
        new Mic.GridPanel({  
            title : 'test',  
            width : 500,  
            height : 410,  
            dataUrl : 'test.action',  
            dwrStore : false,  
            colMapping : ['id','name'],  
            headers : [  
                { header: "Id", width: 60, dataIndex:'id'},  
                { header: "名称", width: 150, dataIndex:'name'}  
            ]  
        }).render(Ext.getBody());  
    }); 

调用说明: dataUrl : 'test.action'  test就是action中的name属性。

返回数据:

效果图: