1 学习计划
1、实现区域导入功能
n OCUpload一键上传插件使用
n 将文件上传到Action
n POI简介
n 使用POI解析Excel文件
n 完成数据库操作
n 使用pinyin4J生成简码和城市编码
2、区域分页查询
n 页面调整
n 服务端实现
3、重构分页代码
n BaseAction
n 子类Action
4、分区添加功能
n 什么是分区
n 页面调整(combobox使用)
n 服务端实现
2 实现区域导入功能
2.1 jquery OCUpload一键上传插件使用
OCUpload(One Click Upload)
第一步:将js文件引入页面
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.ocupload-1.1.2.js"></script>
第二步:在页面中提供任意一个元素
第三步:调用插件提供的upload方法,动态修改HTML页面元素
<script type="text/javascript"> $(function(){ //页面加载完成后,调用插件的upload方法,动态修改了HTML页面元素 $("#myButton").upload({ action:'xxx.action', name:'myFile' }); }); </script>
2.2 在服务端接收上传的文件
在Action中提供一个File类型的属性,名称和上传的文件输入框名称一致regionFile
@Controller @Scope("prototype") public class RegionAction extends BaseAction<Region>{ //属性驱动,接收上传的文件 private File regionFile; public void setRegionFile(File regionFile) { this.regionFile = regionFile; } /** * 区域导入 */ public String importXls(){ System.out.println(regionFile); return NONE; } }
2.3 apache POI技术
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
下载开发包:
解压上面的zip文件:
在项目中引入POI的依赖:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.11</version> </dependency>
POI使用:
@Test public void test1() throws FileNotFoundException, IOException{ String filePath = "C:\\Users\\zhaoqx\\Desktop\\BOS项目(黑马32期)\\BOS-day05\\资料\\区域导入测试数据.xls"; //包装一个Excel文件对象 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(filePath))); //读取文件中第一个Sheet标签页 HSSFSheet hssfSheet = workbook.getSheetAt(0); //遍历标签页中所有的行 for (Row row : hssfSheet) { System.out.println(); for (Cell cell : row) { String value = cell.getStringCellValue(); System.out.print(value + " "); } } }
2.4 pinyin4J
<!-- 引入pinyin4J的依赖 --> <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency>
@Test public void test1(){ //河北省 石家庄市 桥西区 String province = "河北省"; String city = "石家庄市"; String district = "桥西区"; //简码---->>HBSJZQX province = province.substring(0, province.length() - 1); city = city.substring(0, city.length() - 1); district = district.substring(0, district.length() - 1); String info = province + city + district; String[] headByString = PinYin4jUtils.getHeadByString(info); String shortcode = StringUtils.join(headByString); System.out.println(shortcode); //城市编码---->>shijiazhuang String citycode = PinYin4jUtils.hanziToPinyin(city, ""); System.out.println(citycode); }
3 区域数据分页查询
利用之前已经写好的pageQuery
4 重构分页代码
将重复分代码统一抽取到BaseAction中
5 分区数据添加功能
区域范围很大,对区域进行细分产生分区
5.1 easyUI combobox下拉框使用
制作一个json文件:
<input data-options="url:'${pageContext.request.contextPath }/json/combobox_data.json', valueField:'id', textField:'name'" class="easyui-combobox">
5.2 使用combobox展示区域数据
页面:WEB-INF/pages/base/subarea.jsp
第一步:修改页面中combobox:
添加获取name的方法
第二步:在RegionAction中提供listajax方法
第三步:在RegionDao中扩展方法
第四步:为添加窗口中保存按钮绑定事件
5.3 服务端实现
创建分区对应的Action、Service、Dao
6 分页查询问题
将Java对象转为json过程中,因为对象之间有相互引用关系,会发生死循环问题,解决方式,排除其中属性