我自己本身不是很会写,所以参照了别人的代码:
http://www.jfinal.com/share/183
他的代码有部分改动(由反射改成了类型转换,思考:直接将T写死成Record,controller里面根据前台传递的参数拼接sql,少了一步强转):
private static <T> Object getFieldValue(T t, String fieldName) throws Exception{ if (t == null) { return null; } Model m = (Model)t; return m.get(fieldName); }
只管贴代码吧,前端用的是layui:
按钮:
<button class="layui-btn layui-btn-small" data-type="exp"> <i class="layui-icon"></i>导出 </button>
//调用函数 exp : function(){ var wb = { headNames: '编号,登录名称,昵称,创建时间,密码,是否锁定,最后一次在线时间,状态,是否在线', heads: 'id,code,name,createTime,password,isLocked,lastOnline,state,online', xlsName: '用户列表' } var temp = document.createElement("form"); document.body.appendChild(temp); temp.action = "/user/expExcel"; temp.method = "POST"; temp.style.display = "none"; if (wb != null) { for ( var x in wb) { var opt = document.createElement("input"); opt.name = x; opt.type = 'hidden'; opt.value = wb[x]; temp.appendChild(opt); } } temp.submit(); }
后台action代码(请原谅我没有捕捉异常):
public void expExcel() throws Exception{ String[] headNames = getPara("headNames").split(","); String[] heads = getPara("heads").split(","); String xlsName = getPara("xlsName"); List<User> users = User.dao.find("select * from t_user"); ExcelKit.outPutExcel(users, headNames, heads, xlsName, getRequest(), getResponse()); //下面这句话不写,坑死人。。。不信你试试,哈哈哈 renderNull(); }
后期如果有空的话,可以给出一个选择列表,由客户去选择导出需要的数据行(假想效果):
个人比较菜,轻喷。。哈哈哈