版权声明:本文为博主原创文章,未经博主允许不得转载! https://blog.csdn.net/bojinyanfeng/article/details/84999972
问题描述:经过查询条件(中文参数)进行查询后,datagrid列表是有数据的,点击导出后发现excel文件没有数据。具体情况参考下图:
通过查看前端js代码发现有做条件拼接处理,并且也对条件进行了中文转码encodeURI()。
/**
* Jeecg Excel 导出
* 代入查询条件
*/
function JeecgExcelExport(url,datagridId){
var queryParams = $('#'+datagridId).datagrid('options').queryParams;
$('#'+datagridId+'tb').find('*').each(function() {
queryParams[$(this).attr('name')] = $(this).val();
});
var params = '&';
$.each(queryParams, function(key, val){
params+='&'+key+'='+val;
});
var fields = '&field=';
$.each($('#'+ datagridId).datagrid('options').columns[0], function(i, val){
if(val.field != 'opt'){
fields+=val.field+',';
}
});
window.location.href = url+ encodeURI(fields+params);
}
然后通过后台打断点进行查看接收的参数,即可得知是中文乱码的问题。
解决方法其实就是后台对条件进行转码就可以了。
后台解决方法如下所示:
public String exportXls(CourseEntity course,HttpServletRequest request,HttpServletResponse response
, DataGrid dataGrid,ModelMap map) {
//2018年12月14日11:19:41 add cyf 条件中文乱码处理 strat
try {
if(StringUtil.isNotEmpty(course.getTeacher().getName())){
TeacherEntity t= course.getTeacher();
t.setName(new String(course.getTeacher().getName().getBytes("ISO8859-1"), "UTF-8"));
course.setTeacher(t);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//2018年12月14日11:19:41 add cyf 条件中文乱码处理 end
CriteriaQuery cq = new CriteriaQuery(CourseEntity.class, dataGrid);
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, course, request.getParameterMap());
List<CourseEntity> courses = this.courseService.getListByCriteriaQuery(cq,false);
map.put(NormalExcelConstants.FILE_NAME,"用户信息");
map.put(NormalExcelConstants.CLASS,CourseEntity.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("课程列表", "导出人:Jeecg",
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,courses);
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}