window.open() POST 方式提交json数据,以及后台的json序列化为对象
2017-02-21 09:58
1516 查看
在导出时候,ajax实现并不好处理,可以选择用window.open()的方式,后台框架选择poi或者jxl即可,若不是太过复杂的导出选择jxls模板的方式最为方便。
但在处理复杂的导出报表时候我选择是用poi框架写调用poiAPI的方式实现。window.open()传递固定参数或者简单参数时候使用get即默认的方式即可。但若是需要传递比较复杂的json参数,或者是jsonList的参数,并且参数不定时候,用get方式并不好构造参数而且很可能会超出url的长度范围,需要使用post的方式去提交,例如需要传递的参数如下,并且jsonList的数据可以动态增加
直接上前端window.open()代码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/15/b1edad9642c04a023a70a433f812e98a)
后台解析传参代码
但在处理复杂的导出报表时候我选择是用poi框架写调用poiAPI的方式实现。window.open()传递固定参数或者简单参数时候使用get即默认的方式即可。但若是需要传递比较复杂的json参数,或者是jsonList的参数,并且参数不定时候,用get方式并不好构造参数而且很可能会超出url的长度范围,需要使用post的方式去提交,例如需要传递的参数如下,并且jsonList的数据可以动态增加
[{ "fieldFormat" : "STRING", "operator" : "IS_NOT", "specialField" : "status", "values" : ["DRAFT"] }, { "operator" : "LESS_THAN", "fieldFormat" : "DATE", "specialField" : "happened_time", "values" : ["2017-02-21T00:00:00"] }, { "operator" : "LESS_THAN_EQUAL", "fieldFormat" : "DATE", "specialField" : "opinion_time", "values" : ["2017-02-21T23:59:59"] }, { "specialField" : "confirm_time", "fieldFormat" : "DATE", "values" : ["2017-02-21T23:59:59"], "operator" : "LESS_THAN_EQUAL" }, { "operator" : "GREATER_THAN_EQUAL", "fieldFormat" : "DATE", "specialField" : "confirm_time", "values" : ["2017-02-14T00:00:00"] }, { "operator" : "IS", "fieldFormat" : "STRING", "specialField" : "status", "values" : ["SUBMIT"] } ]
直接上前端window.open()代码
{ xtype : 'button', text: '导出', width: 100, style: 'margin-left:40px', handler: function(){ me.exportEventContent(); } }导出函数,使用form的submit模拟window.open()方式提交
exportEventContent: function (){ var me = this; var url = _selfUrl; //需要去进行访问的url var predictions = me.getSearchPredicate(); me.openNewPost('POST',url,predictions,"_blank"); }
// Arguments : // verb : 'GET'|'POST' // target : an optional opening target (a name, or "_blank"), defaults to "_self" openNewPost: function(verb, url, data, target) { var form = document.createElement("form"); form.action = url; form.method = verb; form.target = target || "_self"; if (data) { for (var key in data) { var input = document.createElement("textarea"); input.name = key; input.value = typeof data[key] === "object" ? JSON.stringify(data[key]) : data[key]; form.appendChild(input); } } form.style.display = 'none'; form.enctype='application/json'; document.body.appendChild(form); form.submit(); document.body.removeChild(form); }实际去访问url时,传递的参数如下:
后台解析传参代码
@ RequestMapping( value = "/exportExcel" ) public void exportExcel( HttpServletRequest request, HttpServletResponse response ) throws ParseException, IOException { List < ObjectTmp > objectTmps= jsonStrToBeanList( request ); } public static List < ObjectTmp > jsonStrToBeanList( HttpServletRequest request ) throws ParseException { List < ObjectTmp > resultList = new ArrayList < ObjectTmp > (); int i = 0; while ( request.getParameter( i + "" ) != null ) { JSONObject jsonObject = JSONObject.fromObject( request.getParameter( i + "" ) ); ObjectTmp tmp = (ObjectTmp) JSONObject.toBean( jsonObject, ObjectTmp.class ); resultList.add( tmp ); i++; } return(resultList); }
相关文章推荐
- 利用HttpWebRequest以POST方式提交Json数据-后台实现不同平台间的数据传输
- javascript中创建对象,并序列化为json,通过$.ajax的提交json数据到后台方法,取值为null的问题
- 表单向后台提交数据,get和post的两种方式的根本区别以及如何处理乱码?
- window.open()时以post方式提交数据
- window.open以post方式提交
- window.open (参数使用post方式提交)
- Fiddler进行模拟Post提交json数据,总为null解决方式
- 用window.open时能否通过post方式传输数据?
- window.open以post方式提交
- AJAX如何以POST的方式提交JSON数据到Form
- window.open()提交POST数据
- window.open以post方式提交
- java方式的将java对象以及list或者map转化为json数据
- 转载:java方式的将java对象以及list或者map转化为json数据 .
- application/json 四种常见的 POST 提交数据方式
- window.open以post方式提交
- java方式的将java对象以及list或者map转化为json数据
- window.open (参数使用post方式提交)
- Fiddler进行模拟Post提交json数据,总为null解决方式