Excel文件导入导出实战(3)-xml模板文件的上传下载

来源:互联网 发布:怎么加csv文件到java中 编辑:程序博客网 时间:2024/06/08 15:23
模板文件放在了E:\poi\web_excel_demo\web\template\student.xml;

代码:
<?xml version="1.0" encoding="UTF-8"?><excel id="student" code="student" name="学生信息导入">    <colgroup>        <col index="A" width='17em'></col>        <col index="B" width='17em'></col>        <col index="C" width='17em'></col>        <col index="D" width='17em'></col>        <col index="E" width='17em'></col>        <col index="F" width='17em'></col>            </colgroup>    <title>        <tr height="16px">            <td rowspan="1" colspan="6" value="学生信息导入" />        </tr>    </title>    <thead>        <tr height="16px">        <th value="编号" />            <th value="姓名" />            <th value="年龄" />            <th value="性别" />            <th value="出生日期" />            <th value=" 爱好" />                    </tr>    </thead>    <tbody>        <tr height="16px" firstrow="2" firstcol="0" repeat="5">            <td type="string" isnullable="false" maxlength="3" /><!--用户编号 -->            <td type="string" isnullable="false" maxlength="50" /><!--姓名 -->            <td type="numeric" format="##0" isnullable="false" /><!--年龄 -->            <td type="enum" format="男,女" isnullable="true" /><!--性别 -->            <td type="date" isnullable="false" maxlength="30" /><!--出生日期 -->            <td type="enum" format="足球,篮球,乒乓球" isnullable="true" /><!--爱好 -->        </tr>    </tbody></excel>
我们要做的就是实现解析这个XML文件,并将其作为Excel模板,实现模板的上传下载功能。

我们先从数据导入开始,这个就叫importData-{method},我们完成其struts2.xml的配置:

 <!--数据导入-->        <action name="importdata-*" class="com.huangteng.demo.action.importDataAction" method="{1}">            <result>/jsp/importList.jsp</result>        </action>

我这次会非常详细的将过程记录下拉,总结一下。

首先我们从数据库开始,建立相关的表。

我们建立两张新表,t_importdata,t_importdatadetail.
在model中建立实体类,属性关联对应表的字段并提供get/set方法:

importdata:

importdatadetail:


首先我们要实现上传一个模板Excel到数据库之后我们能在主页面看到相关的信息,我们现在表t_importdata里面随便插入一条测试数据。

然后开始写页面的jsp.

html代码:

js代码:

/** *初始化数据表格   */$('#t_importdata').datagrid({idField:'id' ,title:'数据列表' ,fit:true ,height:450 ,url:'importdata-list' ,fitColumns:true ,  striped: true ,//隔行变色特性 loadMsg: '数据正在加载,请耐心的等待...' ,rownumbers:true ,frozenColumns:[[//冻结列特性 ,不要与fitColumns 特性一起使用 {field:'ck' ,width:50 ,checkbox: true}]],columns:[[{field:'importid' ,title:'主表id' ,width:100 ,hidden:true},{field:'importDataType' ,title:'数据类型' ,width:100 ,sortable : true },{field:'importDate' ,title:'导入时间' ,width:100 ,sortable : true },{field:'importStatus' , title:'导入标志' ,width:100 ,formatter:function(value , record , index){if(value == 1){return '导入成功' ;} else if( value == 0){return '导入失败' ; }}},{field:'handleDate' , title:'处理时间' ,width:100},{field:'handleStatus' , title:'处理标志' ,width:100 ,formatter:function(value , record , index){if(value == 1){return '已处理' ;} else if( value == 0){return '未处理' ; }}}]] ,pagination: true , pageSize: 10 ,pageList:[5,10,15,20,50],

跟前一章节的功能结构相似,不过多说了,不熟悉的可以看看Jquery-easyUI的demo.我就是直接引用,然后改改参数的。

因为url:import-list;

所以我们只需要在importAction中添加一个list方法。为了实现分页,action中同样要声明4个属性并提供get/set方法

list方法代码:

//获取数据导入的数据列表    public void list(){        HttpServletResponse response = ServletActionContext.getResponse();        response.setContentType("text/html;charset=utf-8");        importDataList = importDataService.list(page,rows,sort,order);        String json="{"+"\"total\":"+importDataList.size()+","+"\"rows\":"+ JSON.toJSONString(importDataList)+"}";        //System.out.println(json);        try {            response.getWriter().write(json);        } catch (IOException e) {            e.printStackTrace();        }    }

对应service中的代码:

public class ImportDataService {    //从数据库查询导入项目信息    public List<ImportData> list(int currentPage, int pageSize,String sort,String order){        Connection conn = DB.creatConn();        String sql = "select * from  t_importdata where 1=1";        if(StringUtils.isNotBlank(sort)){            sql+="order by"+sort;        }        if(StringUtils.isNotBlank(order)){            sql+=" "+order;        }        sql+=" limit "+(currentPage-1)*pageSize+","+pageSize; //这里的limit前边一定记得加空格哦        PreparedStatement ps = DB.prepare(conn,sql);        List<ImportData> importDatas = new ArrayList<ImportData>();        try {            ResultSet rs = ps.executeQuery();            ImportData i = null;            while(rs.next()){                i = new ImportData();                i.setImportid(rs.getString("importid"));                i.setImportDataType(rs.getString("importdatatype"));                i.setImportDate(rs.getString("importdate"));                i.setImportStatus(rs.getString("importstatus"));                i.setHandleDate(rs.getString("handledate"));                i.setHandleStatus(rs.getString("handlestatus"));                importDatas.add(i);            }        } catch (SQLException e) {            e.printStackTrace();        }finally{            DB.close(conn);            DB.close(ps);        }        return importDatas;    }

运行之后看看效果:



大概就这样了,页面刷新时会显示出我们插入的文件信息以及处理状态 。

相信大家看到了页面左上角的三个按钮,删除我就不说了,接着看看导入模块:

首先增加页面按钮toolbar


对应dialog代码:
<div id="templateDialog" title="选择模板" modal=true draggable=falseclass="easyui-dialog" closed=true style="width: 350px;height:220px"><form action=""><table><tr><td>选择模板:</td><td><input id="templates" name="templates" class="easyui-combobox" panelHeight="auto"url="importdata-templates" valueField="templateId" textField="templateName" value="" /><a id="okBtn" class="easyui-linkbutton">确定</a></td></tr></table></form></div>

url:importdata-templates;

所以我们要在action中添加一个方法,叫templas,创建一个model,提供getset方法,包含两个属性templateId,templateName

//获取导入模板,并打印在导入模板选择的下拉选    public void templates(){        HttpServletResponse response = ServletActionContext.getResponse();        response.setContentType("text/html;charset=utf-8");        List<Template> list = new ArrayList<Template>();        Template t = new Template();        //模板文件在web/template/student.xml        t.setTemplateId("student");        t.setTemplateName("student");        list.add(t);        try {            response.getWriter().write(JSON.toJSONString(list));        } catch (IOException e) {            e.printStackTrace();        }    }

运行,看看效果:


........



0 0
原创粉丝点击