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 使用combobox展示区域数据

1、 pages/baes/sub_area.jsp

2、 在添加分区窗口中,修改选择区域 combobox的url

1、 问题:combobox通过text获取显示文本

2、 解决 :在区域实体中添加属性get方法

1.1 服务端

创建分区三层对象:略

 

在分区的action中添加保存方法:

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

分区分页查询

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

定区的添加

第一步:在定区添加表单中展示未关联到定区分区记录

第二步:提交表单(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、定区管理管理-添加,分页的更多相关文章

  1. JAVAEE——BOS物流项目05:OCUpload、POI、pinyin4J、重构分页代码、分区添加、combobox

    1 学习计划 1.实现区域导入功能 n OCUpload一键上传插件使用 n 将文件上传到Action n POI简介 n 使用POI解析Excel文件 n 完成数据库操作 n 使用pinyin4J生 ...

  2. JAVAEE——BOS物流项目03:学习计划、messager、menubutton、登陆拦截器、信息校验和取派员添加功能

    1 学习计划 1.jQuery easyUI messager使用方式 n alert方法 n confirm方法 n show方法 2.jQuery easyUI menubutton使用方式 3. ...

  3. springmvc学习(五)——处理模型数据

    Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参 ...

  4. 项目一:第七天 CRM 和bos系统实现定区关联客户,关联快递员. 通过CXF框架实现

    定区关联客户 需求:为了快递方便客户下订单(发快递),派快递员上门取件.  所以说需要让定区关联客户(知道客户属于哪个定区),定区跟快递员关系:多对多.知道让哪个快递员上门取件. 将CRM系统中,客户 ...

  5. easyUI定区关联快递员js代码

    easyUI定区关联快递员js代码: <script type="text/javascript"> $.fn.serializeJson=function(){ va ...

  6. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. MVC客户管理(添加、修改、查询、分页)

    ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页)   目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2 ...

  8. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  9. JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结

    1 学习计划 1.分区组合条件分页查询 n 分区分页查询(没有过滤条件) n 分区分页查询(带有过滤条件) 2.分区导出 n 页面调整 n 使用POI将数据写到Excel文件 n 通过输出流进行文件下 ...

随机推荐

  1. 【leetcode刷题笔记】Decode Ways

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  2. P4844 LJJ爱数数

    题目 P4844 LJJ爱数数 本想找到莫比乌斯反演水题练练,结果直接用了两个多小时才做完 做法 \(\sum\limits_{a=1}^n\sum\limits_{b=1}^n\sum\limits ...

  3. linux通过脚本获取内存信息

    1 原理 脚本中通过执行free获取内存信息,然后将文本信息通过“空格”分隔符分割成字符串数组将不同信息提取出来,最后通过bc计算出百分比 2 脚本 #!/bin/shHOSTNAME=`hostna ...

  4. Python 变量(赋值,数据类型,数据类型转换)

    一.python 变量赋值方式有三种: 1.直接赋值:age = 28 2.多个变量赋值 age, sex = 28, 1  #每个变量都必须要有个对应的值 3.特殊形式的赋值(链式赋值)  a = ...

  5. JS获取ListBox所有项

    JS代码: var listbox = document.getElementById("<%=lbCustom.ClientID %>"); var values = ...

  6. 是否可以重定向到 WEB-INFO 下的页面?

    redirect的路径一定不能在WEB-INF路径下,因为redirect是相当于用户直接访问了路径,而用户不能访问WEB-INF目录下的文件,只有程序内部转发的时候才能转发到WEB-INF下的JSP ...

  7. mySQL 5.7版 解决密码登录失败Access denied for user 'root'@'localhost' (us

    mySQL 5.7版 解决密码登录失败Access denied for user 'root'@'localhost' (us             2016-03-05              ...

  8. Javascript-- jQuery样式篇(二)

    jQuery的属性与样式 .attr()与.removeAttr() 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.如:在img元素中,src就是元素的特性,用来标 ...

  9. 【Educational Codeforces Round 37】F. SUM and REPLACE 线段树+线性筛

    题意 给定序列$a_n$,每次将$[L,R]$区间内的数$a_i$替换为$d(a_i)$,或者询问区间和 这题和区间开方有相同的操作 对于$a_i \in (1,10^6)$,$10$次$d(a_i) ...

  10. jQuery插件:图片放大镜--jQuery Zoom

    本文转载于http://blog.csdn.net/xinhaozheng/article/details/4085644, 这是一款非常不错的给图片添加放大镜效果,可以应用在诸如zen cart,m ...