您的位置:首页 > 其它

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

2016-08-11 11:01 851 查看
模板文件放在了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();
}
}


运行,看看效果:



........
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: