将后台数据传到前台JSON应用

来源:互联网 发布:万维网官网域名 编辑:程序博客网 时间:2024/06/02 01:13

先看看源代码:

_page=voucher4TestCSharp.queryForPagePDF(admdivcode,styeay,         vtcode,star_voucherno,curPage, pageSize);                if(_page!=null){        list = _page.getResultList();        }        listMap = new ArrayList<Map<String,String>>();             for(VoucherDTO_PDF newVoucherDTO_PDF:list){     Map<String,String> map = null;     map = BeanUtils.describe(newVoucherDTO_PDF);          String voucher_no=newVoucherDTO_PDF.getVoucher_no();     String quhua_code=newVoucherDTO_PDF.getAdmdivcode();     String vt_code=newVoucherDTO_PDF.getVt_code();         String styear=newVoucherDTO_PDF.getStyear();              map.put("download", "<a href=javascript:download('"+voucher_no+"','"+quhua_code+"','"+vt_code+"','"+styear+"')>下凭证载</a>");      listMap.add(map);     }Map<String,List<Map<String,String>>> resultMap = new HashMap<String,List<Map<String,String>>>();resultMap.put("data", listMap);JSONObject jo = JSONObject.fromObject(resultMap);jo.put("recordCount", _page.getTotalRows());this.actionWrite(jo.toString());return null;


写回到前台的数据JO:

{"data":[    {"admdivcode":"110000","voucher_no":"TCNO1818745456","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCNO1818745456','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCNO174881120","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCNO174881120','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCNO1981697224","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCNO1981697224','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCNO2054239848","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCNO2054239848','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"yk00002","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('yk00002','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCNO323306459","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCNO323306459','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"LL00001","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('LL00001','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"yk00001","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('yk00001','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCNO218019412","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCNO218019412','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCN323306459","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCN323306459','110000','1101','2014')>下凭证载<\/a>"},    {"admdivcode":"110000","voucher_no":"TCN11O323306459","vt_code":"1101","styear":"2014","download":"<a href=javascript:download('TCN11O323306459','110000','1101','2014')>下凭证载<\/a>"}    ],   "recordCount":11}

最重要的是格式,以什么样的格式即最终要以JSON的格式传到后台去。这个格式是JSON的规范,所以不难理解为什么为什么在后台Java代码中费劲心思不断将数据转换成Map,

Map<String,String> map = null;map = BeanUtils.describe(newVoucherDTO_PDF);

Listt数组,再将List转换成Map数组,

List<Map<String,String>> listMap=null;listMap = new ArrayList<Map<String,String>>();listMap.add(map);


再new一个map放入List,y而是为了和Ext或者前台的根对应:

Map<String,List<Map<String,String>>> resultMap = new HashMap<String,List<Map<String,String>>>();放入数据:resultMap.put("data", listMap);

最后将map装换成JSON数据,通过JSONObject类

将map转换为JSON数据:JSONObject jo = JSONObject.fromObject(resultMap);




对于前台的数据接收:前台其实是自动将JSON解析出来的,不需要程序员的参与,JSON本身就是一个Map,一个标准。【以下是公司封装的,只供参考】


一个关于得到GridPanel内容的函数:

function getStore(urlpath, fileds) {var fields = getFiled(fileds);var store = new Ext.data.JsonStore( {proxy: {        type: 'ajax',       url : urlpath,   timeout: 90000, reader: {           <strong>type: 'json',            root: 'data',totalProperty : 'recordCount'</strong>}},pageSize: itemsPerPage,//remoteSort : true,fields : fields,autoLoad : false});return store;}

黑体标记的就是传递过来的数据。

再看看var fields = getFiled(fileds);此时功能只是要显示部分列选项数据。

function getFiled(filed) {var fields = filed.split(",");var filed = "[";for ( var i = 0; i < fields.length; i++) {filed = filed + "{name: '" + fields[i] + "'},";}filed = filed.substring(0, filed.length - 1);filed = filed + "]";return strToJson(filed);}

                                         

可以看到这个fields的格式其实和data根数据的格式是相对应的。




总结:不管怎样后台传递JSON数据的格式是固定的,这点要清楚,这是一个规范。


JSON基础:http://baike.baidu.com/view/136475.htm#【百度百科】




以上是自己对后台拼JSON到前台的领悟,非常不清楚,只供参考。


0 0
原创粉丝点击