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

模板文件放在了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=false
			class="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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值