一、实现区域导入功能
n 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>
第二步:在页面提供任意一个元素
<input id="myButton" type="button" value="上传">
第三步:调用插件的upload方法,动态修改HTML页面元素
<script type="text/javascript">
$(function () {
$("#myButton").upload({
action:'XXX.action',
name:'myFile'
});
});
</script>
n 将文件上传到Action
在Action中提供一个File类型的属性,名称和上传的文件输入框名称一致regionFile
@Controller
@Scope("prototype")
public class RegionAction extends BaseAction<Region> {
@Autowired
private RegionService regionService;
// 属性驱动后,接收上传文件
private File regionFile;
public void setRegionFile(File regionFile) {
this.regionFile = regionFile;
}
/**
* 区域导入
*/
public String importXls() {
System.out.println(regionFile);
return NONE;
}
}
n POI简介
POI使用:
在项目中引入POI的依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
n 使用POI解析Excel文件
public class POITest {
// 使用POI解析Excel文件
//@Test
public void test1() throws IOException {
String filePath = "E:\\编程学习\\北京黑马32期\\就业班\\【阶段09】物流BOS系统综合项目\\BOS-day05\\BOS-day05\\BOS-day05\\资料\\区域导入测试数据.xls";
// 包装一个Excel文件对象
HSSFWorkbook Workbook = new HSSFWorkbook(new FileInputStream(new File(filePath)));
// 读取文件中第一个Sheet标签页
HSSFSheet hssfSheet = Workbook.getSheetAt(0);
// 遍历标签页中所有的行
for (Row row:hssfSheet) {
int rowNum = row.getRowNum();
if(rowNum == 0){
continue;
}
for (Cell cell:row) {
String value = cell.getStringCellValue();
System.out.println(value);
}
}
}
}
n 完成数据库操作
n 使用pinyin4J生成简码和城市编码
引入pinyin4J的依赖
<!-- 引入pinyin4J的依赖 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
public class Pinyin4JTest {
@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);
// 城市编码
String cityCode = PinYin4jUtils.hanziToPinyin(city,"");
System.out.println(cityCode);
}
}
二、区域分页查询
n 页面调整
n 服务端实现
三、重构分页代码
n BaseAction
第一步:将重复部分代码统一抽取到BaseAction中
protected PageBean pageBean = new PageBean();
DetachedCriteria detachedCriteria = null;
public void setPage(int page) { pageBean.setCurrentPage(page); }
public void setRows(int rows) { pageBean.setPageSize(rows); }
第二步:设置离线查询对象
第三步:创建统一方法-java对象转json并响应到客户端
/**
* 将制定java对象转化为json,并响应到客户端页面
* @param o
* @param exclueds
*/
public void java2Json(Object o,String[] exclueds){
JsonConfig jsonConfig = new JsonConfig();
// 指定哪些属性不需要转json
jsonConfig.setExcludes(exclueds);
// 使用json-lib将pageBean对象转为json,通过输出流写回页面中
// JSONObject -- 将单一对象转为json
// JSONArray -- 将数组或者集合对象转为json
String json = JSONObject.fromObject(o,jsonConfig).toString();
ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
try {
ServletActionContext.getResponse().getWriter().write(json);
} catch (IOException e) {
e.printStackTrace();
}
}
n 子类Action
四、分区添加功能
n 什么是分区
n 页面调整(combobox使用)
第一步:修改页面中的combobox
n 服务端实现
第二步:在ReginAction中提供listAjax方法
第三步:在RegionDao中扩展方法
第四步:为添加窗口中保存按钮绑定事件
<a id="save" icon="icon-save" href="#" class="easyui-linkbutton" plain="true" >保存</a>
<script type="text/javascript">
$(function(){
$("#save").click(function(){
//表单校验
var r = $("#addSubareaForm").form('validate');
if(r){
$("#addSubareaForm").submit();
}
});
});
</script>
五、解决分页死循环问题
将Java对象转为json过程中,因为对象之间有相互引用关系,会发生死循环问题,解决方式,排除其中属性