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

2023-11-23 11:50

本文主要是介绍蓝云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、商品名改为必填

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

这篇关于蓝云ERP3.0项目开发笔记-------------Day03的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_19693295/article/details/89356821
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/417741

相关文章

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen