当前位置: 首页 > news >正文

黑龙江建设网官方网站三类人员dedecms视频网站开发

黑龙江建设网官方网站三类人员,dedecms视频网站开发,wordpress 地址 .html,重庆市公共资源交易中心网官网1.易错点 1.错误做法 新增收货地址页面的三个下拉列表的内容展示没有和数据库进行交互,而是通过前端实现的(将代码逻辑放在了distpicker.data.js文件中),实现方法是在加载新增收货地址页面时加载该js文件,这种做法不可取 2.正确做法 把这些数据保存到数据库中,用户点击下拉…1.易错点 1.错误做法 新增收货地址页面的三个下拉列表的内容展示没有和数据库进行交互,而是通过前端实现的(将代码逻辑放在了distpicker.data.js文件中),实现方法是在加载新增收货地址页面时加载该js文件,这种做法不可取 2.正确做法 把这些数据保存到数据库中,用户点击下拉列表时相应的数据会被详细的展示出来,然后监听用户选择了哪一项以便后面的下拉列表进行二级关联 3.主要步骤 要将省市区进行展示则 1.需要先从数据库获取全部数据 2.然后当选中【省】时【市】可以自动找到对应的数据找到【市】的时候可以自动找到【区】---二级联动 要点一获取省市区列表 1.创建数据库 t_dict_district表 CREATE TABLE t_dict_district (id INT(11) NOT NULL AUTO_INCREMENT,parent VARCHAR(6) DEFAULT NULL,code VARCHAR(6) DEFAULT NULL,name VARCHAR(16) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEINNODB DEFAULT CHARSETutf8;code和name需要加parent代表父区域的代码号code代表自身的代码号省的父代码号是86,代表中国 2.向该表中插入省市区数据 LOCK TABLES t_dict_district WRITE; INSERT INTO t_dict_district VALUES (1,110100,110101,东城区),(2,110100,110102,西城区)等等等等; UNLOCK TABLES;2.创建省市区的实体类 在包entity下创建实体类District(不需要继承BaseEntity,但因为没有继承BaseEntity所以需要实现接口Serializable序列化) /*** 表示省市区的数据实体类*/Data NoArgsConstructor AllArgsConstructor public class District extends BaseEntity {private Integer id;private String parent;private String code;private String name; } 3. 持久层[Mapper] 1 规划需执行的SQL语句 select * from t_dict_district where parent? order by ASC2 设计接口和抽象方法 日后可能开发新的模块仍要用到省市区列表,那么为了降低耦合性,就要创建新的接口 在mapper层下创建接口DistrictMapper public interface DistrictMapper {/*** 根据用户的父代号查询区域信息* param parent*///查询的结果可能是多个,所以放在集合中ListDistrict findByParent(String parent); } 3 编写映射 创建一个DistrictMapper.xml映射文件并配置上述抽象方法的映射 select idfindByParent resultTypecom.example.mycomputerstore.entity.Districtselect *from t_dict_district where parent#{parent}order by code asc; /select 4 单元测试 创建DistrictMapperTests测试类编写代码进行测试 SpringBootTest RunWith(SpringRunner.class) public class DistrictMapperTests {Autowiredprivate DistrictMapper districtMapper;Testpublic void findByParent() {ListDistrict list districtMapper.findByParent(210100);for (District district : list) {System.out.println(district);}}}4.业务层[Service] 1规划异常 没有异常需要处理 2 设计接口和抽象方法及实现 1.创建一个接口IDistrictService,并定义抽象方法 public interface IDistrictService {/*** 根据父代号来查询区域信息省市区* param parent* return 多个区域信息*/ListDistrict getByParent(String parent); } 2.创建DistrictServiceImpl实现类来实现抽象方法 Service public class IDistrictServiceImpl implements IDistrictService {Autowiredprivate DistrictMapper districtMapper;/*** 根据父代号查找区域** param parent* return*/Overridepublic ListDistrict getByParent(String parent) {ListDistrict list districtMapper.findByParent(parent);//在进行网络数据传输时为了尽量避免无效数据的传递可以将无效数据设置为null//可以节省浏览另一方面提升效率for (District d:list){d.setId(null);d.setParent(null);}return list;} } 3单元测试 在test下的service文件夹下创建DistrictServiceTests测试类 SpringBootTest RunWith(SpringRunner.class) public class DistrictServiceTests {Autowiredprivate IDistrictService districtService;Testpublic void getByParent() {//86代表中国,所有的省父代码号都是86ListDistrict list districtService.getByParent(86);for (District district : list) {System.err.println(district);}} }5.控制层[Controller] 1 设计请求  /districts/GETString parentJsonResultListDistrict 2 处理请求 1.创建一个DistrictController类,在类中编写处理请求的方法 RequestMapping(/district) RestController public class DistrictController extends BaseController{Autowiredprivate IDistrictService districtService;/*** 请求路径和父路径相同时用RequestMapping({/,}),表* 示districts后面跟/或者什么也不跟都会进入这个方法* 点进RequestMapping发现参数类型是String[],且传入一* 个路径时默认有{},传入一个以上路径时需要手动添加{}*/GetMapping({/,})public JsonResultListDistrict getByParent(String parent){ListDistrict data districtService.getByParent(parent);return new JsonResult(OK,data);}} 2.为了能不登录也可以访问该数据,需要将districts请求添加到白名单中: 在LoginInterceptorConfigure类的addInterceptors方法中添加代码:patterns.add(“/districts/**”); 3.启动服务器,不登录账号,直接在地址栏输入http://localhost:8080/districts?parent86测试能否正常获取数据 6.前端页面 1.原始的下拉列表展示是将数据放在js,再动态获取js中的数据,而目前为止我们已经将数据放在了数据库,所以不能让它再使用这种办法了,所以需要注释掉addAddress.html页面的这两行js代码: script typetext/javascript src../js/distpicker.data.js/script script typetext/javascript src../js/distpicker.js/script关于这两行js代码:前者是为了获取数据,后者是为了将获取到的数据展示到下拉列表中 2.检查前端页面在提交省市区数据时是否有相关name属性和id属性(name用于提交数据,id用于监听用户的点击) 3.启动服务器,在前端验证一下是否还可以正常保存数据(除了省市区) 要点二获取省市区名称 上一个模块获取省市区列表是通过父代码号获取子代码号完成联动,该模块获取省市区名称是通过自身的code获取自身的name 1.持久层[Mapper] 1规划需要执行的SQL语句 根据当前code来获取当前省市区的名称,对应就是一条查询语句 select * from t_dict_district where code?2 设计接口和抽象方法 在DistrictMapper接口定义findNameByCode方法 String findNameByCode(String code); 3 编写映射 在DistrictMapper.xml文件中添加findNameByCode方法的映射 select idfindNameByCode resultTypejava.lang.Stringselect name from t_dict_district where code#{code}/select 4 单元测试 在DistrictMapperTests编写测试代码 Test public void findNameByCode() {String name districtMapper.findNameByCode(610000);System.out.println(name); }2.业务层[Service] 1规划异常 没有异常需要处理 2 设计接口和抽象方法及实现 1.在IDistrictService接口定义对应的业务层接口中的抽象方法 String getNameByCode(String code);2.在DistrictServiceImpl实现此方法 Override public String getNameByCode(String code) {return districtMapper.findNameByCode(code); }3 单元测试 业务层只是调用持久层对应的方法然后返回,没有什么额外的实现,可以不用测试(一般超过8行的代码都要进行测试) 3.业务层[Controller] 实际开发中在获取省市区名称时并不需要前端传控制层,然后传业务层,再传持久层,而是在新增收货地址的业务层需要获取省市区名称,也就是说获取省市区名称的模块不需要控制层,只是需要被新增收货地址的业务层所依赖 4.业务层优化 1.在新增收货地址的业务层需要对address进行封装,使其存有所有数据,然后将address传给持久层(记住,持久层只会根据传过来的参数调用某个方法与数据库交互,永远不会有额外的实现),而此时新增收货地址的业务层并没有省市区的数据,所以需要依赖于获取省市区列表的业务层对应的接口中的getNameByCode方法 所以需要在业务层实现类AddressServiceImpl中加 Autowired private IDistrictService districtService;2.在AddressServiceImpl的方法中将DistrictService接口中获取到的省市区数据封装到address对象,此时address就包含了所有用户收货地址的数据 /** * 对address对象中的数据进行补全:省市区的名字看前端代码发现前端传递过来的省市区的name分别为: * provinceCode,cityCode,areaCode,所以这里可以用address对象的get方法获取这三个的数据*/ String provinceName districtService.getNameByCode(address.getProvinceCode()); String cityName districtService.getNameByCode(address.getCityCode()); String areaName districtService.getNameByCode(address.getAreaCode()); address.setProvinceName(provinceName); address.setCityName(cityName); address.setAreaName(areaName);5.前端页面 在addAddress.html页面中来编写对应的省市区展示及根据用户的不同选择来限制对应的标签中的内容 分析: 在加载该页面时三个下拉列表的内容都显示为-----请选择-----没有选择市时如果点击区的下拉列表则列表中只有一个-----请选择-----加载该页面时需要自动发送一个请求把parent86发送出去,然后将返回的省/直辖市填充到select标签中点击四川省后发送请求获取其下的市,并且将获取到的市罗列在市区域下拉列表中省点击-----请选择-----“则需要把市,县内容填充为”-----请选择-----终止请求而不是程序继续跑下去切换省份时,市,县内容更换为-----请选择----- 在addAddress.html中编写js代码 script typetext/javascript !-- 下拉框的默认选项:select的下拉默认选中的是option--//value属性用于表示当前中国区域的code值 /**因为清空后下拉列表的select标签没有option标签,所以需要设置一个默认的option标* 签并给市,县加上该标签.option标签并不会把内容发送到后端,而是将value值发* 送给后端,所以用value表示当前这个区域的code值* */let defaultOptionoption value0---- 请选择 -----/option/** 打开页面自动加载* */$(document).ready(function (){//加载省的数据罗列时代码量较多,建议定义在外部方法中,然后在这里调用定义的方法showProvinceList();//设置默认的请选择“的值作为控制的默认值/*** select标签默认获取第一个option的内容填充到下拉列表中,所以即使加载* 页面时省区域的下拉列表中已经有了所有省但仍然会显示-----请选择-----* */$(#province-list).append(defaultOption)$(#city-list).append(defaultOption);$(#area-list).append(defaultOption)})/** change()函数用于监听某一个控件是否发生改变一旦发生改变就会触发参数的函数* */$(#province-list).change(function (){//先获取行政区父代码let parent $(#province-list).val();//1.先清空市区的select下拉列表中的所有option元素【请选择】的默认数据/*** 如果我选择了河南省洛阳市涧西区,然后又选择了河北省,此时需要* 将市,县下拉列表的所有option清除并显示内容-----请选择-----* empty()表示某标签的所有子标签(针对此页面来说select的子标* 签只有option)* */$(city-list).empty();$(#area-list).empty()//2.填充默认值$(city-list).append(defaultOption);$(#area-list).append(defaultOption)//如果父亲code为0没有选择if(parent0){//如果继续程序,后面的ajax接收的json数据中的data是return;//空集合[],进不了for循环,没有任何意义,所以直接在这里终止程序}$.ajax({url:/district,type:GET,data:parentparent,dataType:JSON,success(e){if(e.state200){let liste.data;for(let i0;ilist.length;i){// option valuename/optionlet opt option value list[i].code list[i].name /option;$(#city-list).append(opt)}}else{alert(城市信息加载失败)}},})})$(#city-list).change(function (){//先获取行政区父代码let parent $(#city-list).val();//1.先清空市区的select下拉列表中的所有option元素【请选择】的默认数据$(#area-list).empty()//2.填充默认值$(#area-list).append(defaultOption)//如果父亲code为0没有选择if(parent0){return;}$.ajax({url:/district,type:GET,data:parentparent,dataType:JSON,success(e){if(e.state200){let liste.data;for(let i0;ilist.length;i){// option valuename/optionlet opt option value list[i].code list[i].name /option;$(#area-list).append(opt)}}else{alert(区县信息加载失败)}},})})//省的下拉列表数据展示function showProvinceList(){$.ajax({url:/district,type:GET,data:parent86,dataType:JSON,success(e){if(e.state200){let liste.data;//获取所有省对象的list集合for(let i0;ilist.length;i){// option valuename/optionlet opt option value list[i].code list[i].name /option;$(#province-list).append(opt)}}else{alert(省/直辖市信息加载失败)}},})}$(#btn-add-new-address).click(function (){$.ajax({url:/address/add_new_address,type:POST,data:$(#form-add-new-address).serialize(),dataType:JSON,success(e){if(e.state200){alert(新增收货地址成功)}else{alert(新增收货地址失败)}},error(xhr){alert(新增收货地址产生未知的异常xhr.status)}})})/script
http://www.hkea.cn/news/14351818/

相关文章:

  • 如何给别人做网站赚钱常见的erp软件有哪些
  • 教育类网站怎么做柒零叁网站建设
  • 手机上自己如何做网站网页设计和网站建设毕业设计
  • 学校网站的英文动漫制作专业软件
  • wordpress 鼠标经过优化好的网站做企业网站
  • 自动化科技产品网站建设网络推广建立站点如何建立
  • 做社群最好的网站源码网页开发需要的技术
  • 建设旅游网站财务分析手机网站域名解析
  • 嘉兴专业的嘉兴专业网站建设项目wordpress 弹窗广告插件
  • 正规的培训行业网站制作网站 域名 云服务器
  • 郑州企业网站优化网站运营编辑
  • 深圳html5网站建设厦门seo优化
  • 深圳网站策划seo的公司排名
  • 东莞网站建设外包建设工程施工许可证查询网站
  • 网站备案号怎么查德州万企互联网站制作
  • 网站建设平台方案做南美生意做什么网站好
  • 电商网站建设资讯wordpress火车头采集发布失败
  • 温州个人建站模板做网站需不需要购买服务器
  • 网站虚拟机可以自己做吗腾讯云备案网站名称
  • 制作网站域名需要多少钱做直播网站需要那些技术
  • 专门做衬衣的网站亚马逊网站风格
  • 注册网站网高平企业网站
  • 网站后台根据前端做吗网站建设响应技术
  • 手机自适应网站源码wordpress 卸载主题
  • 建设网站装配式建筑楼房wordpress网站数据备份
  • 衡水做淘宝网站广告创意与设计
  • 建网站是什么技术网站开发设计内容
  • 网站快捷按钮以什么方式做视频制作平台
  • 湖北望新建设有限公司网站注册建筑工程公司需要什么条件
  • 烟台优化网站设计模板在哪里找