Memory River

记忆河,记今日之事忆往昔之流

谈谈$(document).ready和window.onload的区别

$(document).ready和window.onload,这两个都是在页面加载完执行的函数,大多数情况下可以随意使用,差别不大,但总是有区别的。$(document).ready:是在页面DOM结构绘制完毕后就执行。 举个栗子:页面中只有有img标签使用远程图片,那么当img标签加载完毕之后就会马上执行ready函数,并不会等img的远程图片加载完成。并且页面可以写多个ready函数。window.onload:是页面所有元素都加载完毕,包括图片等所有元素。只能执行一次。 综上,$(document).ready的执行时间要早于window.onload。
    2019-07-28 13:05:44    ·    40       0

bootstrap的modal模态框点击遮罩层不会关闭modal弹窗

bootstrap提供了一个很好看很好用的模态弹窗modalmodal的弹出关闭方法如下:$('#id').modal('show'); $('#id').modal('hide'); 但是点击背景就会关闭modal,现在做的效果要求除非用户点击“取消”按钮才会关闭modal,否则不会关闭。$("#id").modal({backdrop:'static', keyboard: false}); 或者直接在模态弹窗的div上设置以下属性,也可以达到点击遮罩层不关闭。keyboard:false时,esc键盘不关闭。data-backdrop="static" data-keyboard="false"backdrop:static 官方使用api文档:https://getbootstrap.com/docs/4.0/components/modal/
    2019-07-25 17:00:43    ·    109       0

thymeleaf模板引擎字符串Strings常见的使用方法

判断是不是为空:null:<span th:if="${name} != null">不为空</span> <span th:if="${name1} == null">为空</span> 判断是不是为空字符串: “”<span th:if="${#strings.isEmpty(name1)}">空的</span> 判断是否相同:<span th:if="${name} eq 'jack'">相同于jack,</span> <span th:if="${name} eq 'ywj'">相同于ywj,</span> <span th:if="${name} ne 'jack'">不相同于jack,</span> 不存在设置默认值:<span th:text="${name2} ?: '默认值'"></span> 是否包含(分大小写):<span th:if="${#strings.contains(name,'ez')}">包ez</span> <span th:if="${#strings.contains(name,'y')}">包j</span> 是否包含(不分大小写)<span th:if="${#strings.containsIgnoreCase(name,'y')}">包j</span> 同理。。。下面的和JAVA的String基本一样。。。。${#strings.startsWith(name,'o')} ${#strings.endsWith(name, 'o')} ${#strings.indexOf(name,frag)}// 下标 ${#strings.substring(name,3,5)}// 截取 ${#strings.substringAfter(name,prefix)}// 从 prefix之后的一位开始截取到最后,比如 (ywj,y) = wj, 如果是(abccdefg,c) = cdefg//里面有2个c,取的是第一个c ${#strings.substringBefore(name,suffix)}// 同上,不过是往前截取 ${#strings.replace(name,'las','ler')}// 替换 ${#strings.prepend(str,prefix)}// 拼字字符串在str前面 ${#strings.append(str,suffix)}// 和上面相反,接在后面 ${#strings.toUpperCase(name)} ${#strings.toLowerCase(name)} ${#strings.trim(str)} ${#strings.length(str)} ${#strings.abbreviate(str,10)}// 我的理解是 str截取0-10位,后面的全部用…这个点代替,注意,最小是3位
    2019-07-11 09:15:14    ·    89       0

阿里云CentOS挂载新数据盘

文记录下在阿里云 CentOS 服务器下安装和挂载新的数据盘的详细命令和步骤:1、查看磁盘列表fdisk -l 2、分区数据盘fdisk /dev/vdb 创建一个单分区数据盘,依次执行以下命令: 输入 n 并按回车键:创建一个新分区。 输入 p 并按回车键:选择主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明:如果要创建 4 个以上分区,您应该创建至少一个扩展分区,即选择 e(extended)。 输入分区编号并按回车键。因为这里仅创建一个分区,可以输入 1。 输入第一个可用的扇区编号:按回车键采用默认值 1。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。3、重新查看磁盘列表fdisk -l 4、格式化分区此数据盘被格式化成 ext4 文件格式。mkfs.ext4 /dev/vdb1 5、将设备挂载到指定的目录下mount /dev/vdb1 /data 6、保存到文件系统表 /etc/fstab 当系统重新启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。echo /dev/vdb1 /data ext4 defaults 0 0 >> /etc/fstabji 就这样就完成了数据盘的挂载了。使用命令 df -h 查看磁盘情况。
    2019-07-10 09:04:14    ·    125       0

Linux vim编辑器命令

保存命令按ESC键 跳到命令模式,然后::w 保存文件但不退出vi:w file 将修改另外保存到file中,不退出vi:w! 强制保存,不推出vi:wq 保存文件并退出vi:wq! 强制保存文件,并退出viq: 不保存文件,退出vi:q! 不保存文件,强制退出vi:e! 放弃所有修改,从上次保存文件开始再编辑
    2019-07-06 11:59:19    ·    64       0

SpringBoot项目Json中的空值处理

博客前端使用的是thymeleaf模板引擎,这个模板引擎有时候很操蛋,比如下面代码:<input type="hidden" id="mainImagePath" name="mainImagePath" th:value="${article?.imgsrcPath}">如果article对象中,不存在imgsrcPath节点的时候,就会给我报错,抛异常。我下面模拟一下异常,随便写一个节点叫caodan,百度无解。只能走歪道,因为是由于字段的值为null,在返回的时候自动给去掉了null值的返回值了,导致前端获取不到。方法:将null值的字符串的值改为"",即空串。使用的java类如下:springboot前提下。package com.wchuf.basics.config; import java.util.List; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; /** * 返回结果,null按类型转换为对应的默认值 */ @Configuration public class JacksonConfig extends WebMvcConfigurerAdapter{ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( //List字段如果为null,输出为[],而非null SerializerFeature.WriteNullListAsEmpty, //是否输出值为null的字段,默认为false SerializerFeature.WriteMapNullValue, //字符串null返回空字符串 SerializerFeature.WriteNullStringAsEmpty, //空布尔值返回false SerializerFeature.WriteNullBooleanAsFalse, //结果是否格式化,默认为false SerializerFeature.PrettyFormat); //格式化日期 fastJsonConfig.setDateFormat("YYYY-MM-dd HH:mm:ss"); converter.setFastJsonConfig(fastJsonConfig); converters.add(converter); } }
    2019-07-04 09:23:10    ·    150       0

pl/sql developer + instant-client 连接远程Oracle数据库

简述 由于Oracle体积太大,但是它的客户端安装包中有instant client 这一项,可以安装instantclient +plsql取代安装庞大的客户端。 instantclient不仅体积小,还无需安装,解压就可以使用。下载instant-client下载地址:https://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.htmlPL/SQL Developer下载地址https://www.allroundautomations.com/bodyplsqldevreg.html安装安装plsqldev1301x64.msi;解压instantclient-basic-windows.x64-12.2.0.1.0.zip 到 D:\Program Files\instantclient_12_2;配置1、配置instantclient环境变量 变量名:NLS_LANG 值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK2、配置pl/sql developer 启动PL/SQL Developer,在登录窗口界面,点击取消按钮进入主界面,点击Configure->Preferences,在Connection中需要配置如下两个参数:Oracle Home:D:\Program Files\instantclient_12_2OCI Library:D:\Program Files\instantclient_12_2\oci.dll3、连接数据库 上面的配置完成之后,重启PL/SQL Developer。Database格式:IP:端口/实例名。如:192.168.1.120:1521/orcl
    2019-03-05 12:53:00    ·    122       0

springboot项目中 使用thymeleaf引用公共HTML头部静态资源

问题 现在我的博客网站是spa架构的,一开始没有规划好导致现在做SEO头疼得很,咬咬牙决定再一次改版博客网站,抛弃现有的spa架构,改为传统的服务器渲染模式,内容发布网站为了SEO总是必要的。经过对架构和框架细细思量,决定使用springboot+thymeleaf的方式构建前端,在java代码里请求原有的微服务进行数据的获取,返回页面显示。 说干就干,马上开始研究thymeleaf模板引擎,在html代码中,需要将一些公共的静态资源文件统一引用,类似jsp的include一样。原始页面文件:这一堆静态资源都是公共的,需要单独处理引用,这样就不用每个页面都写一遍。特别是title、mate这些信息,自然是每篇文章都会不一样的。我的项目结构如下:解决方法1、资源定位 thymeleaf提供了一个很好的资源定位的方法,比如我的静态资源都是放在static下面的,那我引用的方式就直接:th:href="@{/assets/vendor/fonts/fontawesome.css}"<!-- Icon fonts --> <link rel="stylesheet" type="text/css" th:href="@{/assets/vendor/fonts/fontawesome.css}"> <link rel="stylesheet" type="text/css" th:href="@{/assets/vendor/fonts/ionicons.css}"> <link rel="stylesheet" type="text/css" th:href="@{/assets/vendor/fonts/linearicons.css}"> <link rel="stylesheet" type="text/css" th:href="@{/assets/vendor/fonts/open-iconic.css}"> <link rel="stylesheet" type="text/css" th:href="@{/assets/vendor/fonts/pe-icon-7-stroke.css}"> 2、创建公共的html 创建公共的HTML,由公共HTML文件统一管理公共静态资源的引入。我项目创建了一个公共的HTML: 然后把所有需要全局引入的静态资源文件放到这个HTML里引入:上面代码中的重点:<th:block th:fragment="common_resource">。th:fragment标签的值相当与将此段代码给命名,所以要注意同一个路径同一个文件内,不要出现一样命名的代码片段。另外:这里必须要用 th:block,至于为什么,文章末尾再解释。3、引用公共HTML 引用的方法很简单,一行代码就可以了。<head> <div th:replace="common/resource/common_resource :: common_resource"></div> </head> common/resource/common_resource :表示common/resource路径下的common_resource.html文件冒号右边的common_resource:表示common_resource.html文件内的使用th:fragment标签定义的对应名称的代码片段至此,使用thymeleaf引用公共HTML头部静态资源就配置完成了。访问刷新页面就可以看到效果了。尾注: 由于<head></head>标签中不能存放<div></div>之类的标签,而不同页面的title基本上都不同,再加上网站后期的SEO优化需要的<meta/>标签,这些都要单独出来。 如果使用<head th:replace="路径 :: 模块名"></head>或者<div th:include="路径 :: 模块名"></div>,都会使引入或者模块中的主标签保留下来,在此处都是不适用的,解决方法如下: 引入:<div th:replace="路径 :: 模块名"></div> 模块:<th:block th:fragment="模块名"></th:block> <th:block></th:block>是Thymeleaf提供的唯一的一个Thymeleaf块级元素,其特殊性在于Thymeleaf模板引擎在处理<th:block>的时候会删掉它本身,而保留其内容(多用于渲染平级标签)。th:replace 和<th:block>的结合,完美舍弃引入和模块处的主标签。
    2019-03-05 09:12:18    ·    215       0

no protocol 异常的原因及解决方法

问题描述: 我在请求京东快递API的时候,出现了如下的错误。一开始挺郁闷的,完全摸不着头脑。问题的原因: 后来发现这个错误java.net.MalformedURLException: no protocol的意思是请求没有指定通讯协议。解决: 既然知道是没有指定通讯协议的,就回去看了我请求京东API的URL,确实如此。后来发现,使用了京东的SDK之后,是不需要传API接口的名称的,SDK中已经集成了的,只需要传输请求的域名那串URL即可,于是说干就干,改成https://api.jd.com/routerjson则OK了。
    2019-02-28 09:41:21    ·    95       0

项目启动报错.NoClassDefFoundError: org.codehaus.jackson.map.ObjectMapper

还是对接京东快递API出现的问题,京东那API文档写的不是很清楚,下载他们的SDK是一个独立的jar包,也没说明jar包里的文件都是什么,更加没说明jar的使用还需要那些三方jar包,真的是一头雾水啊。 出现这个问题,我第一感觉就是肯定缺少jar包了,但是不知道是那个jar包,然后百度一番,终于有答案了。 我的是Maven项目,在pom文件中加入以下依赖就好了。<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> OK,完事。
    2019-02-28 08:51:48    ·    132       0