导出Excel
<h3>说明</h3>
<ul>
<li>导入和导出是系统中最常见的操作。系统中所有的导出均使用Excel方式导出</li>
<li>导出使用的jar包为hutool-poi</li>
</ul>
<h5>步骤1</h5>
<p>在前端页面中添加导出按钮,并且给予事件</p>
<pre><code class="language-html"><a class="btn btn-success btn-xs no-border" onclick="$.table.export()">
<i class="fa fa-download"></i> 导出
</a></code></pre>
<p>其中export内部就是提交查询表单:</p>
<pre><code class="language-javascript">export: function(){
$.alert.confirm("最多只能导出5万条数据,确认导出?",function(){
var json = $.form.serializeObject() || {};
$.common.wpost($.table._option.exportUrl,json,true);
});
},</code></pre>
<p>配置导出链接</p>
<pre><code class="language-javascript">$.table.init({
modalName:"日志",
modalType:"log",
exportUrl:path + "/log/export" // 可以省略,默认就是这个地址,具体原因,请参考前端章节。
});</code></pre>
<h5>步骤2</h5>
<p>在项目webapps/export/tpl目录下,创建导出模板,例如:log.tpl,该模板完成符合Jfinal Enjoy模板引擎规范。更复杂的导出完全可以通过Enjoy模板引擎来定制。</p>
<ul>
<li>第1,2行定义了常量,方便导出时候可以自由转换字段。</li>
<li>第3行定义导出的表头信息,用英文逗号分隔</li>
<li>
<p>循环模板数据,开始导出数据。注意如果是时间格式,可以通过 <code>x.create_time.toDate()</code> 完成时间转换</p>
<h1>set(log_status={-1:"全部",1:"成功",2:"失败"})</h1>
<h1>set(log_op={10:"登录",20:"查询",30:"新增",40:"修改",50:"删除",60:"导出",70:"导入"})</h1>
<p>操作用户,操作IP,IP归属地,操作URL,类型,状态,描述,操作时间</p>
<h1>for(x : datas)</h1>
<pre><code>#(x.create_user),#(x.log_ip),#(x.ip_location),#(x.log_url),#(log_op[x.log_op]),#(log_status[x.status]),#(x.log_desc),#(x.create_time.toDate())</code></pre>
<h1>end</h1>
</li>
</ul>
<h5>步骤3</h5>
<p>在查询待导出的数据,调用模板导出。</p>
<ul>
<li>此例子中使用了Modal层paginate 方法,只是举例,也可以自己来实现方法。但是要将查询结果出入到CSVRender 中。</li>
</ul>
<pre><code class="language-java">// 注意此时 PageOrder 不能通过 getAttr("PageOrder") 获取,因为不是分页,分页拦截器没有办法封装 PageOrder对象。
public void export() throws Exception{
Log log = getModel(Log.class);
log.put("start_time", getDatePara2Long("start_time"));
Page<Log> page = Log.dao.paginate(new PageOrder(), log);
render(new CSVRender("log.tpl",page.getList()));
}</code></pre>