项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页
Service:
/**
* @Description: 1、保存定区 2、让分区关联定区
* 对象三种状态 1、持久态(被session管理对象-一级缓存中有对象) 2、托管态(有OID标识,数据库中有记录) 3、瞬时态 new对象
对象关联:持久态可以关联持久态 / 持久态关联托管态
*/
public void save(FixedArea model, String[] subAreaId) {
//问题:保存完成参数定区对象是瞬时态
//解决:使用save方法返回对象(返回结果是持久态)
//结论:1、当保存实体主键类型如果是java基本类型,save方法参数对象保存完后就是持久态
// 2、当保存实体主键类型如果不是java基本类型,save方法返回值才是持久态
model = fixedAreaDao.save(model);
//方式一:执行sql语句完成关联-update t_sub_area s set s.c_fixedarea_id = ? where s.c_id = ?
//方式二:通过对象关联
//假设model对象是持久态
if(subAreaId!=null && subAreaId.length>0){
for (String sId : subAreaId) {
//查询到分区对象是持久态
SubArea subArea = subAreaDao.findOne(sId);
//查询实体配置:由分区维护关系
subArea.setFixedArea(model); //更新分区记录中定区外键
}
}
}

1、 区域数据(pinyin4j-简码,城市编码)
2、 Web层代码重构(model对象,分页代码提取)
3、 区域分页查询
3、分区添加功能
4、定区管理管理-添加,分页
BaseAction抽取
1.1 getModel模型驱动对象提取
1、 创建BaseAction使用泛型,继承ActionSupport 实现ModelDriven接口
2、 让其他的action继承BaseAction,
3、 子类对象action对象创建,BaseAction无参构造执行
4、 在无参构造中获取实际类型参数
protected T model;
public T getModel() {
return model;
}
/**
子类action对象创建,父类BaseAction无参构造执行---目的获取实际类型(class)参数
1、T:代表任意类型。一般写大写字母T (大写字母即可)
2、BaseAction<Standard>:参数化类型(class)
3、<>中:实际类型参数
*/
public BaseAction() {
try {
//第一步:获取当前运行class(子类class)
Class clzz = this.getClass(); // cn.itcast.bos.web.action.base.StandardAction
System.out.println(clzz);
//第二步:获取父类参数化class(BaseAction的calss)
/*Type getGenericSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。 */
Type type = clzz.getGenericSuperclass(); //cn.itcast.bos.web.action.common.BaseAction<cn.itcast.bos.domain.base.Standard>
System.out.println(type);
//type是顶级接口--将顶级接口转为子接口
ParameterizedType pt = (ParameterizedType) type;
//第三步:获取实际类型(class)参数
/*Type[] getActualTypeArguments()
返回表示此类型实际类型参数的 Type 对象的数组。 */
Type[] types = pt.getActualTypeArguments(); // [cn.itcast.bos.domain.base.Standard]
//将Standard的type转为standard的Class
Class clzzzzzzzzzzzzzzz = (Class) types[0]; //cn.itcast.bos.domain.base.Standard
System.out.println(clzzzzzzzzzzzzzzz);
//第四步:将实际class实例化
model = (T) clzzzzzzzzzzzzzzz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
1.2 分页代码提取
1、 将page,rows在BaseAction中接收
2、 将转Json代码定义到父类中
//通过属性驱动接收datagrid提交的两个参数 page ,rows
protected int page;
protected int rows;
public void setPage(int page) {
this.page = page;
}
public void setRows(int rows) {
this.rows = rows;
}
/**
* @Description: 将page结果转为分页查询json
* 将java对象转为json字符串
* @param page :分页查询结果
* @param excludes :转json排除属性
*/
public void java2json(Page<T> page, String[] excludes){
try {
Map<String, Object> map = new HashMap<>();
map.put("total", page.getTotalElements());
map.put("rows", page.getContent());
//将fiexeares属性排除掉
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
String json = JSONObject.fromObject(map, jsonConfig).toString();
System.out.println(json);
//通过response对象向浏览器输出
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(json);
} catch (Exception e) {
e.printStackTrace();
}
}
1 分区添加
1.1 使用combobox展示区域数据
1、 pages/baes/sub_area.jsp
2、 在添加分区窗口中,修改选择区域 combobox的url


1、 问题:combobox通过text获取显示文本
2、 解决 :在区域实体中添加属性get方法



1.1 服务端
创建分区三层对象:略
在分区的action中添加保存方法:

因为分区实体中的主键是String类型 不能自增 所以需要手动给主键赋值

1 分区分页查询


由于在页面中展示分区所属的区域信息,区域对象不能排除。解决方案:将区域下分区集合subareas属性排除掉!!

1 定区的添加
第一步:在定区添加表单中展示未关联到定区分区记录
第二步:提交表单(1、定区相关属性 2、多个分区ID)
第三步:在服务端提供保存方法(1、保存定区 2、让分区关联定区)

定区由物理地址上相近的分区构成。定区是物流公司进行物流人员分配基本单位。
1、 页面:pages/base/fixed_area.jsp
2、 调整页面:增加选择分区功能
<tr height="300">
<td valign="top">关联分区</td>
<td>
<table id="subareaGrid" class="easyui-datagrid" border="false" style="width:300px;height:300px"
data-options="url:'${pageContext.request.contextPath}/subAreaAction_listajax.action',fitColumns:true,singleSelect:false">
<thead>
<tr>
<th data-options="field:'id',width:30,checkbox:true">编号</th>
<th data-options="field:'keyWords',width:150">关键字</th>
<th data-options="field:'assistKeyWords',width:200,align:'right'">辅助关键字</th>
</tr>
</thead>
</table>
</td>
</tr>
1.1 通过datagrid展示分区数据
1、 发出请求获取未关联到定区分区数据

1、 在分区action中添加方法:返回分区数据(不需要分页),josn的数组
action:





1、 解决:将datagrid ,展示形式为checkbox的field改为:subareaId

1、 问题2:提交subaareaId的值为null

1、 解决:在分区的实体中添加subareaId属性的get方法即可



1.1 服务端保存定区
定区-分区:一对多;在分区表中有外键定区ID;
保存定区:保存一条定区数据,分区关联定区
Action:

项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页的更多相关文章
- JAVAEE——BOS物流项目05:OCUpload、POI、pinyin4J、重构分页代码、分区添加、combobox
1 学习计划 1.实现区域导入功能 n OCUpload一键上传插件使用 n 将文件上传到Action n POI简介 n 使用POI解析Excel文件 n 完成数据库操作 n 使用pinyin4J生 ...
- JAVAEE——BOS物流项目03:学习计划、messager、menubutton、登陆拦截器、信息校验和取派员添加功能
1 学习计划 1.jQuery easyUI messager使用方式 n alert方法 n confirm方法 n show方法 2.jQuery easyUI menubutton使用方式 3. ...
- springmvc学习(五)——处理模型数据
Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参 ...
- 项目一:第七天 CRM 和bos系统实现定区关联客户,关联快递员. 通过CXF框架实现
定区关联客户 需求:为了快递方便客户下订单(发快递),派快递员上门取件. 所以说需要让定区关联客户(知道客户属于哪个定区),定区跟快递员关系:多对多.知道让哪个快递员上门取件. 将CRM系统中,客户 ...
- easyUI定区关联快递员js代码
easyUI定区关联快递员js代码: <script type="text/javascript"> $.fn.serializeJson=function(){ va ...
- ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- MVC客户管理(添加、修改、查询、分页)
ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页) 目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结
1 学习计划 1.分区组合条件分页查询 n 分区分页查询(没有过滤条件) n 分区分页查询(带有过滤条件) 2.分区导出 n 页面调整 n 使用POI将数据写到Excel文件 n 通过输出流进行文件下 ...
随机推荐
- iOS UIImage UIImageView 展示图片 不变形 处理
展示图片 时候 固定 了 imageView 的大小 图片 也裁剪了 尽量保持比例 可是 还是失真 变形了 这张图 ui 要求展示的UIimageView 大小 是固定 的 ,传过来的 图片 是 ...
- Python 变量(赋值,数据类型,数据类型转换)
一.python 变量赋值方式有三种: 1.直接赋值:age = 28 2.多个变量赋值 age, sex = 28, 1 #每个变量都必须要有个对应的值 3.特殊形式的赋值(链式赋值) a = ...
- 自底向上归并排序(Merge Sort)
一.思路 另一种实现归并排序的方法是,先归并微型数组,再成对归并得到的子数组,直到将整个数组归并在一起. 我们先进行1-by-1归并,然后2-by-2归并,4-by-4归并,如此下去. 在最后一次归并 ...
- Netty使用LineBasedFrameDecoder解决TCP粘包/拆包
TCP粘包/拆包 TCP是个”流”协议,所谓流,就是没有界限的一串数据.TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TC ...
- matlab对点云旋转平移
1.显示茶壶点云 ptCloud = pcread('teapot.ply');figure(1)pcshow(ptCloud); title('Teapot'); 2.Create a transf ...
- Mac系统给移动硬盘分区(图文)
刚买的硬盘500G 准备分几个区 移动硬盘分区格式化有3中形式: 1.Mac OS 扩展日志 格式 此格式mac专用,这种格式的硬盘在PC上不可见,可以用来给 Time Machine 备份, T ...
- 图像处理检测方法 — ORB(Oriented FAST and Rotated BRIEF)
1.FAST FAST算子的基本原理是:若某像素点与其周围领域内足够多的连续的像素点存在某一属性差异,并且该差异大于指定阈值,则可以断定该像素点与其邻域像素有可被识别的不同之处,可以作为一个特征点( ...
- 十三 Django框架,CSRF跨站请求伪造
全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMidd ...
- Java钉钉开发_异常_01_error code:50002, error message:请求的员工userid不在授权范围内
一.异常原因: 请求的员工不在 应用的可见范围内. 如下图,应用的可见范围只设置为了部分员工.所以导致此异常 二.异常解决 将员工添加进可见范围即可
- python的random模块及加权随机算法的python实现
random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.seed(x)改变随机数生成器的种子seed. 一般不必特别去设定seed,Python会自动选择seed. ...