蓝云ERP3.0项目开发笔记-------------Day03

一、员工管理的完善


主要任务:

1、查询页面完善任务:
  • 查询员工不显示密码
  • 查询员工显示性别汉字
  • 查询员工日期格式化显示
  • 查询员工所在部门显示为部门名
  • 完善员工查询功能,实现范围查询
2、员工数据编辑界面完善任务:
  • 性别输入改为单选框
  • 日期格式化,不让用户输入,让用户选择
  • 部门输入框改为下拉菜单,选择数据
  • 数据的前端验证
  • 解决日期无法正常回显问题
  • 解决下拉列表,数据回显问题
  • 解决Struts2日期无法保存问题

具体实现过程:

一、查询页面完善:

1、修改查询页面不显示密码

  • 修改前端页面显示:
    雇员页面js文件

    (此处修改只是不显示,但是通过F12控制台,仍然可以看到后台传过来的雇员密码)

  • 解决控制台可查看密码:

    解决方法:修改Emp实体类,为其添加JSON注解:@JSONField(serialize=false)。添加后此对象在进行转换为JSON数据时,该行将不再被序列化为JSON数据。

    在这里插入图片描述

2、修改查询页面性别显示

  • 修改前端页面,添加EasyUI的格式化器formatter
    在这里插入图片描述

3、日期格式化显示

  • 引入date.js,用于格式化显示雇员中的日期显示

    date.js代码如下:

    // 对Date的扩展,将 Date 转化为指定格式的String   
    // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,   
    // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)   
    // 例子:   
    // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
    // (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18   
    Date.prototype.Format = function(fmt)   
    { //author: meizz   
    	if(isNaN(this.getDate()))
    	{
    		return "";
    	}
    	
      var o = {   
        "M+" : this.getMonth()+1,                 //月份   
        "d+" : this.getDate(),                    //日   
        "h+" : this.getHours(),                   //小时   
        "m+" : this.getMinutes(),                 //分   
        "s+" : this.getSeconds(),                 //秒   
        "q+" : Math.floor((this.getMonth()+3)/3), //季度   
        "S"  : this.getMilliseconds()             //毫秒   
      };   
      if(/(y+)/.test(fmt))   
        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));   
      for(var k in o)   
        if(new RegExp("("+ k +")").test(fmt))   
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
      return fmt;   
    } 
    
  • 前端页面添加EasyUI的formatter格式器
    在这里插入图片描述

4、显示部门名称

  • 修改Emp实体类,将其中的Long类型的depuuid成员,修改为Dep类型的dep
    在这里插入图片描述

  • 修改Emp实体类的映射文件,配置为多对一的关联关系
    在这里插入图片描述

  • 为界面的部门字段添加格式化器,显示部门名称
    在这里插入图片描述

  • 解决每个部门只显示一次的问题

    问题如下:
    在这里插入图片描述

  • 解决部门只显示一次(关闭FastJson的循环引用保护)在转换为JSON时添加如下参数:
    在这里插入图片描述
    5、完善员工查询功能,实现员工出生日期范围查询

    • 修改部门查询为下拉列表框的方式选择查询的部门

      前端页面修改 在这里插入图片描述
      后台代码修改(修改EmpDao类中的添加查询条件的方法,加上如下内容)
      在这里插入图片描述

    • 修改前端页面显示 ,修改性别查询为单选框查询

      前端页面修改(修改emp.html)
      在这里插入图片描述
      后台代码修改(修改EmpDao类)
      在这里插入图片描述

    • 实现出生日期范围查询

      前端代码修改 在这里插入图片描述 后台代码修改
      在这里插入图片描述

二、员工数据编辑界面完善:

1、编辑雇员的性别,由输入框改为单选框

  • 修改emp.html中的性别表单如下:
    在这里插入图片描述

2、雇员出生日期,不再让用户输入,改为用户选择

  • 使用EasyUI的日期插件,修改input表单的class为easyui-datebox
    在这里插入图片描述
  • 修改其为不可编辑状态,防止用户输入
    在这里插入图片描述

3、部门下拉列表加载部门信息

  • 使用EasyUI的列表插件,实现通过URL加载部门列表
    在这里插入图片描述

4、前端的数据验证

  • 验证登录名不为空

    使用EasyUI中的easyui-validatebox类,修改其data-options如下
    在这里插入图片描述

    required:是否为必须填写项
    missingMessage:未填写时,鼠标移到上边的提示信息

  • 验证邮箱格式必须要正确

    使用EasyUI中的easyui-validatebox类,修改其data-option如下:
    在这里插入图片描述

    validType:验证的类型
    invalidMessage:当格式不正确时的提示信息

  • 将部门修改成必填

    由于combobox继承于validatebox,所以,可以直接为其添加data-options属性如下:
    在这里插入图片描述

  • 保存提交时,验证所有表单是否都数据校验通过,然后提交数据

    使用到EasyUI中表单form的validate方法,当所有表单都验证通过时返回true,故如下:
    在这里插入图片描述

5、完善数据回显,日期类型无法回显的错误

  • 定义FastJSON的日期转换格式,在带有日期类型的对象转换JSON时,添加转换格式:

    在这里插入图片描述

6、完善数据回显,下拉列表无法回显:

  • 问题原因

    前端返回数据:
    在这里插入图片描述
    前端接收数据表单: 在这里插入图片描述 由于数据回显是根据name值,匹配JSON数据中的键进行回显的,很明显JSON中并没有t.dep.uuid的键,因此数据不可回显。

  • 解决方法:

    编写JSON数据拼接方法mapJson,传入属性驱动的标志符,进行拼接,拼接方法如下:

    /**
     * 	自定添加前缀
     * @param jsonString
     * @param prefix
     * @return
     */
    private String mapJson(String jsonString,String prefix){
    
    	//将JSON数据转换为Map的JSONObject对象
    	Map<String,Object> map=JSON.parseObject(jsonString);
    	//创建一个新的Map,存放拼接的JSON数据
    	Map<String,Object> newmap=new HashMap<String,Object>();
    	//遍历前边解析出的JSONObject对象
    	for(String key:map.keySet()){
    		//判断当前获取的是否为一个Map类型的对象
    		if(map.get(key) instanceof Map) {
    			//如果是,则将获取到的其对象,强转为Map类型
    			Map<String,Object> innerMap=(Map<String,Object>)map.get(key);
    			//遍历每个对象,将其前缀、键、值进行拼接
    			for (String innerKey : innerMap.keySet()) {
    				//进行拼接
    				newmap.put(prefix+"."+key+"."+innerKey,innerMap.get(innerKey));
    			}
    		}else {
    			newmap.put(prefix+"."+key, map.get(key));
    		}
    	}
    	//将我们拼接的Map转为JSON字符串,并返回
    	return  JSON.toJSONString(newmap);
    }
    ```![在这里插入图片描述](https://img-blog.csdnimg.cn/20190418205425670.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzE5NjkzMjk1,size_16,color_FFFFFF,t_70)
    
    > 添加以上代码后,转换出的JSON的数据如下,此时就可以进行下拉列表的数据回显了:	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190418130510348.png)
    
    

7、解决日期无法转换导致的日期保存不上的问题:

  • 问题原因:

    由于Struts2自带的日期类型转换器,但是他的类型转换器只能转换它所支持的类型:

    通过查看Struts2的源代码发现,其共有7个自带的日期转换器,其代码如下:
    在这里插入图片描述
    其中我们最熟悉的转换的日期类型就是第七种:fc3399,其可转换"yyy-MM-dd’T’HH:mm:ss"类型的日期,通过我的测试发现,该表达式转换出来的日期如下:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述
    之前一直疑惑,我传入的是2019-4-18,这样的日期为什么转换不过来,原来问题出在这里,所以原因是其只转换的是带有时分秒且通过‘T’分割的‘-’分割的日期类型,如:2019-04-18T20:51:37。

    由于此系统不需要时分秒的时间传入,所以只能自定义类型转换器:

  • 此系统解决日期方法:

    有两种方法可以选择:①定义全局日期类型转换器,②定义局部日期类型转换器

    • 全局日期类型转换器的定义:

      编写类型转换类,通过继承 StrutsTypeConverter类,进行日期类型的转换,其代码如下:

      package cn.itcast.erp.utils;
      
      import java.text.DateFormat;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      import java.util.Map;
      
      import org.apache.struts2.util.StrutsTypeConverter;
      
      public class DateConversion extends StrutsTypeConverter {
      
      	DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
      	
      	public Object convertFromString(Map context, String[] values, Class toClass) {
      		
      		if(values.length!=0) {
      			Date date=null;
      			try {
      				date = dateFormat.parse(values[0]);
      			} catch (ParseException e) {
      				System.out.println("数据转换出现错误");
      			}
      			return date;
      		}
      		
      		return null;
      	}
      
      	public String convertToString(Map context, Object Obj) {
      		
      		if(Obj!=null) {
      			Date date=(Date)Obj;
      			String dateStr=dateFormat.format(date);
      			return dateStr;
      		}
      		
      		return "";
      	}
      	
      }
      
      

      编写xwork-conversion.properties属性文件,放在src根目录下,其内容如下:

      java.util.Date=cn.itcast.erp.utils.DateConversion
      
    • 定义局部日期类型转换器

      编写类型转换类与上边的全局类型转换器的类一样

      编写:action类名-conversion.properties的属性文件,存放在文件名当中的action类名的Action所在包路径下,定义内容如下:

      要转换的参数名=cn.itcast.erp.utils.DateConversion
      

二、商品管理的完善

主要任务:

1、查询页面完善任务:
  • 完善商品类型显示
  • 实现商品类型按下拉菜单进行选择查询
  • 实现销售价的范围查询
  • 实现进货价格范围查询
2、编辑商品页面完善
  • 进货与销售价格的单位显示"¥"
  • 商品名改为必填

具体实现过程:

一、查询页面完善:

1、完善商品类型的显示

  • 配置一对多的关联关系(一个商品类型,对应多个商品)

    修改Goods的实体类如下,将其关联的商品类型改为Goodstype类型:
    在这里插入图片描述
    修改Goods.hbm.xml的hibernate映射文件,配置多对一的关联关系如下:
    在这里插入图片描述

  • 修改前端页面显示,使用EasyUI的格式器,实现如下:
    在这里插入图片描述

2、实现按照下拉菜单进行商品类型的查询

前端界面修改
在这里插入图片描述
后台代码编写
在这里插入图片描述

3、实现销售价范围查询

前端代码修改,添加一个小数价数字输入框,如下:
在这里插入图片描述
后台代码实现,如下:
在这里插入图片描述

4、实现进货价范围查找:

前端代码修改:
在这里插入图片描述
后台代码实现:
在这里插入图片描述

一、编辑商品页面完善:

1、进货与销售价格的单位显示"¥"

前端代码编写
在这里插入图片描述

2、商品名改为必填

修改前端页面
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值