在导出时候,ajax实现并不好处理,可以选择用window.open()的方式,后台框架选择poi或者jxl即可,若不是太过复杂的导出选择jxls模板的方式最为方便。
但在处理复杂的导出报表时候我选择是用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);
}