JFinal

登录 注册

导出excel表格功能

我自己本身不是很会写,所以参照了别人的代码:

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">&#xe61e;</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();
	}

后期如果有空的话,可以给出一个选择列表,由客户去选择导出需要的数据行(假想效果):

image.png

个人比较菜,轻喷。。哈哈哈



评论

  • 01-11 17:42
    学习能力,解决问题的能力蛮强的,假以时日会变得很牛逼
  • 01-11 17:44
    @JFinal 感谢波总鼓励。还得需要强劲的项目锤炼啊。哈哈哈
  • 01-12 13:10
    jf既然提供了record,那么导出excel,只需要一个数据表名就可以搞定。因为你的字段的cn en 什么的系统表能获取,你的数据可以通过你的sql获取。我觉得jf可以做这么一个公用接口,参数值就是表名,sql,然后可以永久使用。针对单表
  • 10-20 10:13
    @fangdengfu jfinal+layui的项目,可以做成maven版的吗?
  • 发送