功能点描述:
1.实现根据Execl模板,进行雇主责任险的导入。
2.Execl全部导出和批量导出。
3.保险信息的删除。
4.保险显示具体的人数信息。
5.微信企业号通讯录的获取展示。
6.企业分子公司基础信息的管理。
学习到的知识:
1.导入Execl的方法,可以参考之前的博客:导入Execl
2.导出Execl:
基本的手段和Execl导入相同,都是用POI进行操作。
XSSFWorkbook wb = new XSSFWorkbook(); //通过XSSFWorkbook生成的是.xlsx文件。 //建立新的sheet对象(excel的表单) XSSFSheet sheet=wb.createSheet("雇主责任险"); //在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个 XSSFRow row1=sheet.createRow(0); //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 XSSFCell cell=row1.createCell(0); //设置单元格内容 cell.setCellValue("投保流水号"); //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列 sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //进行行和列的合并 cell=row1.createCell(1); cell.setCellValue("被保险人名称"); sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); cell=row1.createCell(2); cell.setCellValue("所属体系"); sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); cell=row1.createCell(3); cell.setCellValue("是否附加二十四小时条款"); sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); cell=row1.createCell(4); cell.setCellValue("年度"); sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); cell=row1.createCell(5); cell.setCellValue("投保方案"); sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); cell=row1.createCell(6); cell.setCellValue("投保总人数"); sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); row1.createCell(7).setCellValue("人员清单"); sheet.addMergedRegion(new CellRangeAddress(0,0,7,11)); XSSFRow row2=sheet.createRow(1); row2.createCell(7).setCellValue("姓名"); row2.createCell(8).setCellValue("身份证号"); row2.createCell(9).setCellValue("职位类别"); row2.createCell(10).setCellValue("申报日期"); row2.createCell(11).setCellValue("人员用工方式");
OutputStream output=response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=details.xls");
response.setContentType("application/msexcel");
wb.write(output);
output.close();
这个方法是写在servlet中。设置application/msexcel 指导出为execl格式,attachment会提示还是直接打开。
3.微信企业号的接口的使用,主要是对返回json串的操作,其中对部门的树形结构的设置和显示。可以参考之前博客:ul li多级列表的显示,和微信企业号接口调用。
4.企业组织机构代码的管理,其中使用的一个网上的搜索框,个人感觉挺好看。
其他的部门增删改,都是比较正常的。这次增加和修改的方法也使用了和之前不一样的方法。
之前修改,都是点击修改按钮,将原来<td></td>显示文字的部分,改变为<input type="text">
这次是使用和增加相同的样式,也是使用的一个开源的jquery.点击时text文本框的样式,很简洁。
5.批量导出的功能思考的挺长时间,虽然日常生活中特别多,删邮件啊..的示例,但是自己写的时候不怎么会。
最终的实现方式是:在<table>中每行增加一个<td>里面是<input type="checkbox">设置display:none
当点击了批量导出时,会显示。并且通过向servlet传送sheetid的list。
效果是:
实现的代码:
<TR align="center" id="show<%=plan.getEmployplanid()%>">
<td><input type="checkbox" id="checkboxs<%=i%>" style="display:none"/></td>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getEmployplanid() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getCompanyname() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getInsurname() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getYear() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getNumbers() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getPlantype() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getLimitfee() %></TD>
<TD align="center" οnclick="show(<%=plan.getEmployplanid()%>)"><%=plan.getIsadmit() %></TD>
<TD><button id="delete" οnclick="del(<%=plan.getEmployplanid()%>)">删除</button></TD>
</TR>
js的代码:
function ExportSome(size){
// alert(size);
for(var i=0;i<size;i++){
var checkbox=document.getElementById("checkboxs"+i);
//alert(checkbox);
checkbox.style.display="block";
}
document.getElementById("exportexecl").style.display="block";
}
function confirmExport(){
var arrayindex="";
var size=<%=size%>;
//alert(size);
for(var i=0;i<size;i++){
var checkbox=document.getElementById("checkboxs"+i);
if(checkbox.checked){
arrayindex=arrayindex+i+",";
}
}
//alert(arrayindex);
var url="../ExeclExport?type=some&list="+arrayindex;
window.location.href=url;
}
js中不能通过url传数组类型,所有通过以,隔开的方式传递string.
其实也可以以json的方式组织传给后台
3.以前没有注意,虽然知道怎么写,但是不记得具体的语法,每次都是上网搜一下。
1.设置div背景:
<div style="height:800px;width:1100px;margin-left:20%;margin-top:2%;background-image:url('../pages/common/background.jpg');">
2.a:hover a 设置不显示下划线:
text-decoration:none.
3.<input type="text"> 点击时不显示边框:
style="border:none;outline:medium;"
4.text文本框当鼠标经过时清空,离开时显示原来。
<input type="text" id="s" name="name" style="border:none;outline:medium;" value="名称搜索" class="swap_value" οnfοcus="if (value =='名称搜索'){value =''}"οnblur="if (value ==''){value='名称搜索'}" />
5.对于按钮的圆角和直角控制:
.clickButton{
border-bottom: #93bee2 1px solid;
border-left: #93bee2 1px solid;
border-right: #93bee2 1px solid;
border-top: #93bee2 1px solid;
float:left;
height:30px;
width:100px;
-webkit-border-top-left-radius:10px; 指的是左上角会有一个圆角 10px控制弧度 Google等
-webkit-border-top-right-radius:10px;
-ms-border-top-left-radius:10px; 指IE类的浏览器
-ms-border-top-right-radius:10px;
-moz-border-top-left-radius:10px; 火狐特定浏览器
-moz-border-top-right-radius:10px;
border-top-left-radius:10px;
border-top-right-radius:10px;
font-size: 12px;
font-weight:bold;
background-color: #c5c6c7;
outline:0;
}
可能还是会存在不兼容问题.
效果:
当时查询的时候:有人提出可以自己设计图片,一个半圆,一个直角形,一个半圆,在直角形上加按钮或<a>.没有实践,但是应该可以实现。
6.<form action=“...”>中action中的url是不可以带参数的。可以通过
<input type=hidden name="type" id="type">
使用一个hidden。
其实还有许多种方法。
当设置有一个操作之后有反馈,可以在原界面上<div style="display:none"></div>
js获得这个div设置block和里面的内容。
7.<div>中小的<div>,小的<div>设置margin-top的时候,变成外部的<div>的属性了,可能是相对的物不同,其实没有太懂。
但是是找到解决方法的:
外部的div设置:position:relative;
内部的div设置:position:absolute.
暂时就总结以上这些,再想到的话继续总结。
之后想尝试一些前端好看的框架,之前都是自己写,不好看而且费力。 gerrrr
后端也是沿用以上j2ee项目用工厂模式管理dao.并且使用原生的语句preparedstatement操作链接mysql.
本来想用框架的,但是还是因为怕尝试新的东西....但是实际上用hibernate会减轻许多工作。