by kevin
7.
三月 2021 14:36
>
工具 多平台桌面截图软件flameshot https://github.com/flameshot-org/flameshot/releases 软件快速启动管理工具 http://maxlauncher.sourceforge.net/ Windows下的文件合并工具 https://github.com/WinMerge/winmerge/releases dbeaver,开源的数据库客户端,支持非常多的sql,nosql和大数据。 https://github.com/dbeaver/dbeaver 学习 信息系统项目管理师视频 https://www.bilibili.com/video/BV1Dx411X7VJ?from=search&seid=15326501141098302936 资源分享 收藏了很多软件的启动界面 http://splashscreens.sourceforge.net/ 故宫博物院藏品总目 https://zm-digicol.dpm.org.cn/ 言论 对于不可控的事情,保持乐观。对于可控的事情,保持谨慎。 去感受世界的美好,也给予世界美好。 但是他们为了赚更多的钱,为了赚自己不需要的钱,把自己手里的钱,把自己需要的钱都搭进去了。这不是傻是什么?绝对是傻,不管智商多高,都是傻。 破产的有两种人,一种是什么都不知道的,一种是什么都知道的。
by kevin
3.
三月 2021 14:01
>
1.简介 页面需要共享常见的页面组件,例如页眉,页脚,菜单等。Thymeleaf使用自定义方言解决了这一问题,如创建布局,自定义标题或head元素合并。 2. Maven依赖 首先,看一下将Thymeleaf与Spring集成所需的必需配置。thymeleaf库需要依赖: <dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
请注意,对于Spring 4项目, 必须使用thymeleaf-spring4库而不是thymeleaf-spring5。
还需要自定义布局方言的依赖项:
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
<version>2.4.1</version>
</dependency>
springboot项目,添加以下依赖就可以启动。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
3.命名空间和属性处理器的功能
配置完成后,就可以开始使用布局名称空间和五个新的属性处理器:decorate,title-pattern,insert,replace和fragment。
为了创建要用于HTML文件的布局模板,创建了以下文件,命名为template.html:
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
...
</html>
将名称空间从标准xmlns:th =“ http://www.thymeleaf.org”更改为xmlns:layout =“ http://www.ultraq.net.nz/thymeleaf/layout”。
在HTML文件中使用属性处理器。
3.1。布局:片段
为了在布局或可重复使用的模板中创建可被共享相同名称的部分替换的自定义部分,在template.html正文中使用fragment属性:
<body>
<header>
<h1>New dialect example</h1>
</header>
<section layout:fragment="custom-content">
<p>Your page content goes here</p>
</section>
<footer>
<p>My custom footer</p>
<p layout:fragment="custom-footer">Your custom footer here</p>
</footer>
</body>
请注意,有两个部分将被自定义HTML取代-内容和页脚。
如果找不到任何片段,编写将要使用的默认HTML也很重要。
3.2。布局:装饰
需要做的下一步是创建一个HTML文件,该文件将通过布局进行装饰:
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{template.html}">
<head>
<title>Layout Dialect Example</title>
</head>
<body>
<section layout:fragment="custom-content">
<p>This is a custom content that you can provide</p>
</section>
<footer>
<p layout:fragment="custom-footer">This is some footer content
that you can change</p>
</footer>
</body>
</html>
如第三行所示,使用layout:decorate并指定装饰器源。布局文件中与内容文件中的片段匹配的所有片段将被其自定义实现替换。
3.3。布局:标题模式
鉴于布局方言会自动使用内容模板中的布局标题覆盖布局标题,可以保留在布局中找到的部分标题。
例如,可以创建面包屑或在页面标题中保留网站名称。在这种情况下,layout:title-pattern处理器会提供帮助。需要在布局文件中指定的所有内容是:
<title layout:title-pattern="$LAYOUT_TITLE - $CONTENT_TITLE">Baeldung</title>
因此,上一段中呈现的布局和内容文件的最终结果将如下所示:
<title>Baeldung - Layout Dialect Example</title>
3.4。布局:插入/布局:替换
第一个处理器layout:insert类似于Thymeleaf的原始th:insert,但是允许将整个HTML片段传递给插入的模板。如果有一些要重用的HTML,但其内容过于复杂而无法单独使用上下文变量来确定或构造,则此功能非常有用。
第二个布局是layout:replace,与第一个类似,但是具有th:replace的行为,该行为实际上将使用定义的片段代码替换host标签。
by kevin
2.
三月 2021 12:50
>
老外整理的,我收藏一下。 原始地址:https://github.com/datastacktv/data-engineer-roadmap
by kevin
18.
二月 2021 20:31
>
工具 和弦生成工具 https://github.com/Chen-and-Sim/ChordNova 学习 资源分享 开源免费的H5可视化页面配置解决方案 https://github.com/MrXujiang/h5-Dooring Lively Wallpaper是一款专业的动态壁纸软件 https://rocksdanister.github.io/lively/ https://pan.baidu.com/share/init?surl=uBjARQApwU1Ny1UOEo5LBw 提取码: 8mbi wish卖家chrome插件 https://chrome.google.com/webstore/detail/%E5%8D%96%E5%AE%B6%E7%BD%91wish%E6%95%B0%E6%8D%AE%E6%8F%92%E4%BB%B6/obcfmdamiaokljfkfachcmhhmlebocdn?hl=zh-CN 言论 这个世界并不美好,所以美好才是值得我们去追求的。 我希望自己每天活在从容笃定和盼望之中。 人生之中,你需要三样东西,一个好医生,一个宽容的牧师和一个精明的会计。 公民社会,有知识,不会有共识。 坚持这个事情,有钱的叫任性,没钱的叫倔强;理性的是执着,感性的是固执。 哲学是勇者的武器,信仰是常人的襁褓。 信仰是对超自然、超世俗之存在坚定不移的相信。 艺术是对自然界和世俗生活全心全意的体验和投入。 人类感知世界的方式有三种:体验、改造和思考。体验产生了艺术;改造产生了实践;思考产生了科学。
by kevin
25.
一月 2021 13:41
>
工具 calibre-电子书管理软件 https://calibre-ebook.com/ 学习 Java知识体系总结 https://blog.csdn.net/guorui_java/article/details/112391105 资源分享 人工桌面 https://n0va.mihoyo.com/#/ 言论 眼睛里面写满了故事,脸上没有一点沧桑。 太多的人把辩论看作是战斗,要分出胜负。其实,辩论应该是一种合作,两个人合作发现真理。 想了解一个人的个性,那就赋予他权力。 不管你多么聪明或多么有经验,你的大多数想法根本行不通。成功的想法需要花费时间和辛勤的工作,才能成为被市场广泛采用的真实产品。 完美主义的最大问题是,它实际上让你追求高成本。 选择是一种运气,选择是一种能力。努力是为了可以做更多的选择。 一个知道怎么做的人可能总能找到一份工作,但是知道为什么做的人将成为他的老板。 你在斗争的不是困难,而是规则。 「被选择」考验的是成绩,「选择」考验的是眼光。 从宏观而言,阅读和写作一样是没有“定法”的;但从微观来讲,学生阅读课文也和作文起步一样,又确实有“法”可依。
by kevin
16.
一月 2021 16:13
>
github上有个项目roadmap,归纳了一下it岗位的学习路线,前端和后端的东西我帮到这里。 项目地址:https://github.com/github/roadmap 前端 后端
by kevin
2.
十一月 2020 10:18
>
没有直接的方法,变通的方法是外层加一个th:block,内层写一个或者多个th:if和th:unless。 举个例子: 1: <th:block th:each="i:${#numbers.sequence(0,10)}" >
2: <a class="active" href="javascript:void(0);" th:if="${i==5" th:text="${i}"></a>
3: <a th:href="/${i}" th:unless="${i==5}" th:text="${i}"></a>
4: </th:block>
by kevin
4.
十月 2020 09:20
>
新鲜 飞机靠近地面飞行时,机翼和下方的平面之间会形成气压,这会在飞机下方形成空气垫。这被称为机翼的地面效应,简称 WIG。 冷战期间,苏联利用这个效应,研发了大型的水上飞行器 Ekranoplan。它看上去像飞机,但其实是气垫船,只能在水面上升起十厘米左右。它有八台前置涡轮喷气发动机,最高时速达到每小时600公里。 资源分享 MacOS 的安全和隐私指南 https://github.com/drduh/macOS-Security-and-Privacy-Guide/blob/master/README-cn.md 言论 科技是一种力量,决定它是工具还是武器,取决于使用科技力量的人。 “武”是“止”和“戈”组成的。 经济的意思是在相互联系的基础上进行帮助。 大数据以为的大范围和大规模的数据,当然也意味着大投入。 我深知我的情绪感染不了你,所以我不言不语。 有能力的做选择题,没能力的做必答题。 旅游和读书,其实都是去感知世界。 军队为什么要实行军衔制度?这是为了部队被打散,临时拼建时,能够迅速确定指挥关系。 人权就像是消防队。只有当你处于危险境地,才会在意其存在。 你会在20个方向上走一步,还是在一个方向上走20步? 理性的人使自己适应世界,不理性的人不愿意妥协,坚持要求世界适应他的方式。因此,一切进步都取决于不理性的人。 大公司如何合法避税 有一家世界著名的大型互联网公司,姑且称它为 X 公司,每年有500亿美元的收入。这家公司希望能够合法少缴税。 它就先在开曼群岛,注册了一家 Y 公司。开曼群岛不对公司收税,只收取注册费。然后,它把所有的知识产权,比如商标和特许技术都转移到 Y 公司。 X 公司每年需要向 Y 公司支付很大一笔知识产权许可费用,导致它的利润为零,所以就不用缴税了。而 Y 公司由于注册在开曼群岛,即使有很大一笔利润,也不用缴税。
by kevin
6.
九月 2020 14:34
>
定义 Thymeleaf是一个Java库。它是一个XML / XHTML / HTML5模板引擎,能够对模板文件应用一组转换,以显示应用程序生成的数据和文本。 它更适合在Web应用程序中提供XHTML / HTML5服务,但是它可以处理任何XML文件,无论是在Web中还是在独立应用程序中。 Thymeleaf的主要目标是提供一种优雅且格式正确的模板创建方法。为了实现这一点,它基于XML标签和属性,这些属性定义了DOM(文档对象模型)上预定义逻辑的执行,而不是将该逻辑作为模板中的代码显式编写。 它的体系结构允许依靠已解析文件的智能缓存来快速处理模板,以便在执行过程中使用尽可能少的I / O操作。 重要的一点是,Thymeleaf从一开始就设计了XML和Web标准,允许您在需要时创建完全验证的模板 特点 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,同时开发人员也可以扩展和创建自定义的方言。 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。 与SpringBoot完美整合:SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。 表达式 ${}:变量表达式,@{...}:链接URL表达式,#{...}:消息表达式 *{}:选择变量表达式 字符串拼接 我们经常会用到普通字符串与表达式拼接的情况: <span th:text="'欢迎您:' + ${user.name} + '!'"></span>
字符串字面值需要用'',拼接起来非常麻烦,Thymeleaf对此进行了简化,使用一对|即可:
<span th:text="|欢迎您:${user.name}|"></span>
默认值
有的时候,我们取一个值可能为空,这个时候需要做非空判断,可以使用表达式 ?: 默认值简写:
<span th:text="${user.name} ?: '二狗'"></span>
当前面的表达式值为null时,就会使用后面的默认值。
注意:?:之间没有空格。
循环
循环也是非常频繁使用的需求,我们使用th:each指令来完成:
假如有用户的集合:users在Context中。${users} 是要遍历的集合,可以是以下类型:
Iterable,实现了Iterable接口的类;Enumeration,枚举;Interator,迭代器;Map,遍历得到的是Map.Entry;Array,数组及其它一切符合数组结果的对象
<tr th:each="user,stat : ${users}">
<td th:text="${user.name}">Onions</td>
<td th:text="${user.age}">2.41</td>
</tr>
stat对象包含以下属性:
index,从0开始的角标
count,元素的个数,从1开始
size,总元素个数
current,当前遍历到的元素
even/odd,返回是否为奇偶,boolean值
first/last,返回是否为第一或最后,boolean值
逻辑判断
Thymeleaf中使用th:if 或者 th:unless ,两者的意思恰好相反。
<span th:if="${user.age} > 24">老油条</span>
如果表达式的值为true,则标签会渲染到页面,否则不进行渲染。
以下情况被认定为true:
表达式值为true;表达式值为非0数值;表达式值为非0字符;表达式值为字符串,但不是"false","no","off";表达式不是布尔、字符串、数字、字符中的任何一种
其它情况包括null都被认定为false
分支控制
<div th:switch="${user.role}">
<p th:case="'admin'">用户是管理员</p>
<p th:case="'manager'">用户是经理</p>
<p th:case="*">用户是别的玩意</p>
</div>
th:case="*"表示默认,放最后
读取配置文件的值
${@environment.getProperty('server.port')}
设置任何属性的值
<form action="subscribe.html">
<fieldset>
<input type="text" name="email" />
<input type="submit" value="Subscribe me!" />
</fieldset>
</form>
使用th:attr标签就可以达到如下效果
<form action="subscribe.html" th:attr="action=@{/subscribe}">
<fieldset>
<input type="text" name="email" />
<input type="submit" value="Subscribe me!" th:attr="value=#{subscribe.submit}"/>
</fieldset>
</form>
如果需要一次设置多个属性,采用逗号分隔就可以
<img src="../../images/gtvglogo.png"
th:attr="src=@{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />
样式追加和前置
运用的场景为我们往往可能因为某个值的取值来决定某个样式的变化
<input type="button" value="Do it!" class="btn" th:attrappend="class=${' ' + cssStyle}" />
我们设置cssStyle值为warning来使class属性后面添加这个值
<input type="button" value="Do it!" class="btn warning" />
还有两个特定的附加属性:th:classappend和th:styleappend属性,用于在不覆盖现有属性的情况下向元素添加CSS类或样式片段。
<tr th:each="prod : ${prods}" class="row" th:classappend="${prodStat.odd}? 'odd'">
模板布局
1.定义和引用
定义:th:fragment=".名称"
引用:th:insert="":简单地插入指定的片段作为正文的主标签
th:replace="":用来指定实际片段来替换其主标签
th:include="":类似于th:insert,但是不是插入片段,他只是插入此片段的内容
我们创建了一个foot.html的文件
<div th:fragment="copy">
© 2011 The Good Thymes Virtual Grocery
</div>
在其他页面引用:
<body>
<div th:include="footer :: copy"></div>
</body>
2.引用片段不带th:fragment
<div id="copy-section">
© 2011 The Good Thymes Virtual Grocery
</div>
我们可以使用上面的片段,简单地通过其id属性引用它,类似于CSS选择器:
<div th:include="footer :: #copy-section"></div>
3.参数化的引用
使用定义的th:fragment可以指定一组参数
<div th:fragment="frag (onevar,twovar)">
<p th:text="${onevar} + ' - ' + ${twovar}">
</p>
</div>
在如下代码进行引用
<div th:include="::frag (${value1},${value2})">...</div>
<div th:include="::frag (onevar=${value1},twovar=${value2})">...</div>
父子组件的模板布局语法:layout
1.需要在pom文件引入依赖
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
<version>2.3.0</version>
</dependency>
2.编写模板页面
3.模板页面的使用
4.简便的写法
5.数据传输到页面
6.配置标题
该layout:title-pattern处理器采用一个简单的字符串,有2个节点的标记:$LAYOUT_TITLE和$CONTENT_TITLE。在结果页面中,每个节点将被其各自的标题替换。
结果的页面是
7.可重复使用的模板
现在,可以使用layout:insert处理器插入此模板并实现modal-content片段,但是您需要通过在调用模板的insert元素内创建相同名称的片段来实现:
笔者感觉这种自定义的模板很适合css样式不同但是html布局相同的自定义页面
8.head元素合并
结果:
脚本内联
<script th:inline="javascript">
const user = /*[[${user}]]*/ {};
const age = /*[[${user.age}]]*/ 20;
</script>
在script标签中通过th:inline="javascript"来声明这是要特殊处理的js脚本因为Thymeleaf被注释起来,因此即便是静态环境下, js代码也不会报错,而是采用表达式后面跟着的默认值。且User对象会被直接处理为json格式。
Thymeleaf内置对象
Thymeleaf中提供了一些内置对象,并且在这些对象中提供了一些方法,方便我们来调用。获取这些对象,需要使用#对象名来引用。
一些环境相关对象
对象
作用
#ctx
获取Thymeleaf自己的Context对象
#requset
如果是web程序,可以获取HttpServletRequest对象
#response
如果是web程序,可以获取HttpServletReponse对象
#session
如果是web程序,可以获取HttpSession对象
#servletContext
如果是web程序,可以获取HttpServletContext对象
Thymeleaf提供的全局对象:
对象
作用
#dates
处理java.util.date的工具对象
#calendars
处理java.util.calendar的工具对象
#numbers
用来对数字格式化的方法
#strings
用来处理字符串的方法
#bools
用来判断布尔值的方法
#arrays
用来处理数组的方法
#lists
用来处理List集合的方法
#sets
用来处理set集合的方法
#maps
用来处理map集合的方法
#aggregates
用于在数组或集合上创建聚合的实用程序方法
#messages
实用程序方法,用于获取变量表达式内的外部化消息,与使用#{…}语法获得消息的方法相同。
#ids
用于处理可能重复的id属性的实用方法(例如,由于迭代的结果)
举例:当后台传过来一个时间类型的对象可以用Thymeleaf全局对象来进行格式化
<span th:text="${#dates.format(today,'yyyy-MM-dd')}"></span>
Springboot中使用Thymeleaf
1.引入pom依赖
2. 这里注意添加属性,设定版本,设定版本是为了不再日志中显示thymeleaf的日志,使用3.0的版本是为了提高效率,并且解决标签闭合问题
3. 在application.properties中进行thymeleaf的配置
4在resources下面建立templates文件夹,放置html文件,创建页面,切记要在页面中引入thymeleaf
by kevin
16.
八月 2020 14:55
>
新鲜 座椅面料的秘密科学 乘坐公共交通工具(地铁、公共汽车、电车、火车)时,人们通常不会对座椅面料留下印象,那只是一块不好看、也不十分干净的纺织品而已。 但是,座椅面料其实大有学问。 首先,它必须经久耐用,因为每个座椅每天都有很多人坐。它必须用上几年,而不会有大的磨损。 其次,它必须易于清洁,能够抵抗或掩盖各种污渍。而且,它也必须看上去不十分脏,让人们坐得下去。 最后,可能是最重要的一点。它必须安全,不能着火、冒烟和闷烧,这些可能都会造成致命后果,尤其是在通风不良的地下几十米的地铁。 幸运的是,人们真的找到了这样一种材料。大多数欧美国家的公共交通工具都采用一种叫做 Moquette(法语为"地毯"的意思)的面料。这是一种羊毛和短绒棉的混合织物。 羊毛是天然的阻燃剂,绒毛织物的特殊织法又比平织布具有更高的耐用性。 由于这种面料没有平坦的表面,所以可以抵抗污渍,也可以隐藏掉其中的小颗粒。它的表面还可以加上各种涂层,确保符合安全标准,并且可以定期进行大力清洗。另外,它还具有柔软的质感和触感,并可以织出复杂的图案。 幸存者公寓 美国堪萨斯州大草原一个废弃的导弹发射井内有一个豪华的末日避难所,被称为“幸存者公寓”。这个公寓深入地下50米,共15层,最多可容纳75人居住。除了齐全的现代化生活设备外,避难所内还有游泳池、电影院、图书馆,甚至是攀岩墙壁。发射井顶部加装了穹顶,里面停放着装甲运输车辆。对于一些有末日情结的百万富翁们来说,这里无疑是一个躲避经济崩溃、太阳耀斑、恐怖袭击和传染病流行的理想之所。 这个“幸存者公寓”由开发商拉里-霍尔建造,霍尔说:“一些人总是担心灾难发生,例如太阳耀斑、经济崩溃、传染病大流行、恐怖袭击和食品短缺。”这些人被称之为“末日准备族”,渴望拥有一个安全之所,躲避末日灾难。对于他们来说,霍尔建造的末日避难所无疑是个不错的选择。 工具 drawio,类似visio。 https://github.com/jgraph/drawio-desktop 言论 如果你花钱买,你就是客户,如果你免费获得,你就是产品。 许多 AI 研究人员追求的目标是开发与人类智能原理相同的人工智能,但是这永远不可能实现,因为人的思维基本上没有算法。 一家公司获得垄断地位以后,就不需要从任何形式的产品开发获益了,只通过市场营销或金融工程就能增加利润。最终,公司就会被销售人员和财务人员控制。 公司刚成立时,需要瑞士军刀型人才。公司一旦发展壮大,需要菜刀型人才。