SpringBoot整合模板引擎Thymeleaf(3)

news2024/11/25 18:44:57

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

概述

在本章节详细介绍Thymeleaf的内置对象及其工具类。
在这里插入图片描述

Thymeleaf内置对象

对象描述
#ctx上下文对象
#vars同 #ctx,表示上下文变量
#locale上下文本地化(特定的地理区域)变量,可参考 java.util.Locale
#requestHttpServletRequest 对象,可参考 javax.servlet.http.HttpServletRequest
#responseHttpServletResponse 对象,可参考 javax.servlet.http.HttpServletResponse
#sessionHttpSession 对象,可参考 javax.servlet.http.HttpSession
#servletContextServletContext 对象,可参考 javax.servlet.ServletContext

Thymeleaf工具类

在此,详细介绍Thymeleaf的常用工具类。

对象描述
#messages消息工具类,与 #{…} 作用相同
#uris地址相关的工具类
#conversions对象转换工具类
#dates日期时间工具类
#calendars日历工具类
#numbers数字工具类
#strings字符串工具类
#objects对象工具类
#bools布尔工具类
#arrays数组工具类
#listsList 工具类
#setsSet 工具类
#mapsMap 工具类

objects工具类使用示例

/*
* 当obj不为空时,返回obj,否则返回default默认值
* 其同样适用于数组、列表或集合
*/
${#objects.nullSafe(obj,default)}
${#objects.arrayNullSafe(objArray,default)}
${#objects.listNullSafe(objList,default)}
${#objects.setNullSafe(objSet,default)}

string工具类使用示例

/*
* 检查String是否为空(或null)。在检查之前执行trim()操作也同样适用于数组、列表或集合
*/
${#strings.isEmpty(name)}
${#strings.arrayIsEmpty(nameArr)}
${#strings.listIsEmpty(nameList)}
${#strings.setIsEmpty(nameSet)}
 
/*
* 对字符串执行“isEmpty()”检查, 如果为false则返回它, 如果为true则默认为另一个指定的字符串。
* 也同样适用于数组、列表或集合
*/
${#strings.defaultString(text,default)}
${#strings.arrayDefaultString(textArr,default)}
${#strings.listDefaultString(textList,default)}
${#strings.setDefaultString(textSet,default)}
 
/*
* 检查字符串中是否包含片段,比如 ${#strings.containsIgnoreCase(user.name,'kang')}
* 也同样适用于数组、列表或集合
*/
${#strings.contains(name,'ez')} // 也可以是 array*、list* 或 set*
${#strings.containsIgnoreCase(name,'ez')} // 也可以是 array*、list* 或 set*
 
/*
* 检查字符串是否以片段开始或结束
* 也同样适用于数组、列表或集合
*/
${#strings.startsWith(name,'Don')} // 也可以是 array*、list* 或 set*
${#strings.endsWith(name,endingFragment)} // 也可以是 array*、list* 或 set*
 
/*
* 子串相关操作
* 也同样适用于数组、列表或集合
*/
${#strings.indexOf(name,frag)} // 也可以是 array*、list* 或 set*
${#strings.substring(name,3,5)} // 也可以是 array*、list* 或 set*
${#strings.substringAfter(name,prefix)} // 也可以是 array*、list* 或 set*
${#strings.substringBefore(name,suffix)} // 也可以是 array*、list* 或 set*
${#strings.replace(name,'las','ler')} // 也可以是 array*、list* 或 set*
 
/*
* 附加和前置
* 也同样适用于数组、列表或集合
*/
${#strings.prepend(str,prefix)} // 也可以是 array*、list* 或 set*
${#strings.append(str,suffix)} // 也可以是 array*、list* 或 set*
 
/*
* 大小写转换
* 也同样适用于数组、列表或集合
*/
${#strings.toUpperCase(name)} // 也可以是 array*、list* 或 set*
${#strings.toLowerCase(name)} // 也可以是 array*、list* 或 set*
 
/*
* 拆分和拼接
*/
${#strings.arrayJoin(namesArray,',')}
${#strings.listJoin(namesList,',')}
${#strings.setJoin(namesSet,',')}
${#strings.arraySplit(namesStr,',')} // 返回String []
${#strings.listSplit(namesStr,',')} // 返回List<String>
${#strings.setSplit(namesStr,',')} // 返回Set<String>
 
/*
* Trim
* 也同样适用于数组、列表或集合
*/
${#strings.trim(str)} // 也可以是 array*、list* 或 set*
 
/*
* 计算长度
* 也同样适用于数组、列表或集合
*/
${#strings.length(str)} // 也可以是 array*、list* 或 set*
 
/*
* 缩写文本, 使其最大大小为n。如果文本较大, 它将被剪辑并在末尾附加“...”
* 也同样适用于数组、列表或集合
*/
${#strings.abbreviate(str,10)} // 也可以是 array*、list* 或 set*
 
/*
* 将第一个字符转换为大写(反之亦然)
*/
${#strings.capitalize(str)} // 也可以是 array*、list* 或 set*
${#strings.unCapitalize(str)} // 也可以是 array*、list* 或 set*
 
/*
* 将每个单词的第一个字符转换为大写
*/
${#strings.capitalizeWords(str)} // 也可以是 array*、list* 或 set*
${#strings.capitalizeWords(str,delimiters)} // 也可以是 array*、list* 或 set*
 
/*
* 转义字符串
*/
${#strings.escapeXml(str)} // 也可以是 array*、list* 或 set*
${#strings.escapeJava(str)} // 也可以是 array*、list* 或 set*
${#strings.escapeJavaScript(str)} // 也可以是 array*、list* 或 set*
 
${#strings.unescapeJava(str)} // 也可以是 array*、list* 或 set*
${#strings.unescapeJavaScript(str)} // 也可以是 array*、list* 或 set*
 
/*
* 空安全比较和连接
*/
${#strings.equals(first, second)}
${#strings.equalsIgnoreCase(first, second)}
${#strings.concat(values...)}
${#strings.concatReplaceNulls(nullValue, values...)}
 
/*
* 随机数
*/
${#strings.randomAlphanumeric(count)}

dates工具类使用示例

/*
* 使用标准区域设置格式格式化日期
* 也同样适用于数组、列表或集合
*/
${#dates.format(date)}
${#dates.arrayFormat(datesArray)}
${#dates.listFormat(datesList)}
${#dates.setFormat(datesSet)}
 
/*
* 使用ISO8601格式格式化日期
* 也同样适用于数组、列表或集合
*/
${#dates.formatISO(date)}
${#dates.arrayFormatISO(datesArray)}
${#dates.listFormatISO(datesList)}
${#dates.setFormatISO(datesSet)}
 
/*
* 使用指定的格式格式化日期,比如 ${#dates.format(date,'yyyy-MM-dd HH:mm:ss')}
* 也同样适用于数组、列表或集合
*/
${#dates.format(date, 'dd/MMM/yyyy HH:mm')}
${#dates.arrayFormat(datesArray, 'dd/MMM/yyyy HH:mm')}
${#dates.listFormat(datesList, 'dd/MMM/yyyy HH:mm')}
${#dates.setFormat(datesSet, 'dd/MMM/yyyy HH:mm')}
 
/*
* 获取日期属性
* 也同样适用于数组、列表或集合
*/
${#dates.day(date)} // 也可以是 arrayDay(...), listDay(...)之类的
${#dates.month(date)} // 也可以是 arrayMonth(...), listMonth(...)之类的
${#dates.monthName(date)} // 也可以是 arrayMonthName(...), listMonthName(...)之类的
${#dates.monthNameShort(date)} // 也可以是 arrayMonthNameShort(...), listMonthNameShort(...)之类的
${#dates.year(date)} // 也可以是 arrayYear(...), listYear(...)之类的
${#dates.dayOfWeek(date)} // 也可以是 arrayDayOfWeek(...), listDayOfWeek(...)之类的
${#dates.dayOfWeekName(date)} // 也可以是 arrayDayOfWeekName(...), listDayOfWeekName(...)之类的
${#dates.dayOfWeekNameShort(date)} // 也可以是 arrayDayOfWeekNameShort(...), listDayOfWeekNameShort(...)之类的
${#dates.hour(date)} // 也可以是 arrayHour(...), listHour(...)之类的
${#dates.minute(date)} // 也可以是 arrayMinute(...), listMinute(...)之类的
${#dates.second(date)} // 也可以是 arraySecond(...), listSecond(...)之类的
${#dates.millisecond(date)} // 也可以是 arrayMillisecond(...), listMillisecond(...)之类的
 
/*
* 根据year,month,day创建日期(java.util.Date)对象,比如 ${#dates.create('2008','08','08')}
*/
${#dates.create(year,month,day)}
${#dates.create(year,month,day,hour,minute)}
${#dates.create(year,month,day,hour,minute,second)}
${#dates.create(year,month,day,hour,minute,second,millisecond)}
 
/*
* 创建当前日期和时间创建日期(java.util.Date)对象,比如 ${#dates.format(#dates.createNow(),'yyyy-MM-dd HH:mm:ss')}
*/
${#dates.createNow()}
 
${#dates.createNowForTimeZone()}
 
/*
* 创建当前日期创建一个日期(java.util.Date)对象(时间设置为00:00)
*/
${#dates.createToday()}
 
${#dates.createTodayForTimeZone()}

calendars工具类使用示例

/*
* 使用标准区域设置格式格式化日历
* 也同样适用于数组、列表或集合
*/
${#calendars.format(cal)}
${#calendars.arrayFormat(calArray)}
${#calendars.listFormat(calList)}
${#calendars.setFormat(calSet)}
 
/*
* 使用ISO8601格式格式化日历
* 也同样适用于数组、列表或集合
*/
${#calendars.formatISO(cal)}
${#calendars.arrayFormatISO(calArray)}
${#calendars.listFormatISO(calList)}
${#calendars.setFormatISO(calSet)}
 
/*
* 使用指定的格式格式化日历
* 也同样适用于数组、列表或集合
*/
${#calendars.format(cal, 'dd/MMM/yyyy HH:mm')}
${#calendars.arrayFormat(calArray, 'dd/MMM/yyyy HH:mm')}
${#calendars.listFormat(calList, 'dd/MMM/yyyy HH:mm')}
${#calendars.setFormat(calSet, 'dd/MMM/yyyy HH:mm')}
 
/*
* 获取日历属性
* 也同样适用于数组、列表或集合
*/
${#calendars.day(date)} // 也可以是 arrayDay(...), listDay(...)之类的
${#calendars.month(date)} // 也可以是 arrayMonth(...), listMonth(...)之类的
${#calendars.monthName(date)} // 也可以是 arrayMonthName(...), listMonthName(...)之类的
${#calendars.monthNameShort(date)} // 也可以是 arrayMonthNameShort(...), listMonthNameShort(...)之类的
${#calendars.year(date)} // 也可以是 arrayYear(...), listYear(...)之类的
${#calendars.dayOfWeek(date)} // 也可以是 arrayDayOfWeek(...), listDayOfWeek(...)之类的
${#calendars.dayOfWeekName(date)} // 也可以是 arrayDayOfWeekName(...), listDayOfWeekName(...)之类的
${#calendars.dayOfWeekNameShort(date)} // 也可以是 arrayDayOfWeekNameShort(...), listDayOfWeekNameShort(...)之类的
${#calendars.hour(date)} // 也可以是 arrayHour(...), listHour(...)之类的
${#calendars.minute(date)} // 也可以是 arrayMinute(...), listMinute(...)之类的
${#calendars.second(date)} // 也可以是 arraySecond(...), listSecond(...)之类的
${#calendars.millisecond(date)} // 也可以是 arrayMillisecond(...), listMillisecond(...)之类的
 
/*
* 从其组件创建日历(java.util.Calendar)对象
*/
${#calendars.create(year,month,day)}
${#calendars.create(year,month,day,hour,minute)}
${#calendars.create(year,month,day,hour,minute,second)}
${#calendars.create(year,month,day,hour,minute,second,millisecond)}
 
${#calendars.createForTimeZone(year,month,day,timeZone)}
${#calendars.createForTimeZone(year,month,day,hour,minute,timeZone)}
${#calendars.createForTimeZone(year,month,day,hour,minute,second,timeZone)}
${#calendars.createForTimeZone(year,month,day,hour,minute,second,millisecond,timeZone)}
 
/*
* 为当前日期和时间创建一个日历(java.util.Calendar)对象
*/
${#calendars.createNow()}
 
${#calendars.createNowForTimeZone()}
 
/*
* 为当前日期创建日历(java.util.Calendar)对象(时间设置为00:00)
*/
${#calendars.createToday()}
 
${#calendars.createTodayForTimeZone()}

numbers工具类使用示例

/*
* 设置最小整数位数。
* 也同样适用于数组、列表或集合
*/
${#numbers.formatInteger(num,3)}
${#numbers.arrayFormatInteger(numArray,3)}
${#numbers.listFormatInteger(numList,3)}
${#numbers.setFormatInteger(numSet,3)}
 
 
/*
* 设置最小整数位数和千位分隔符:
* 'POINT'、'COMMA'、'WHITESPACE'、'NONE' 或 'DEFAULT'(根据本地化)。
* 也同样适用于数组、列表或集合
*/
${#numbers.formatInteger(num,3,'POINT')}
${#numbers.arrayFormatInteger(numArray,3,'POINT')}
${#numbers.listFormatInteger(numList,3,'POINT')}
${#numbers.setFormatInteger(numSet,3,'POINT')}
 
 
/*
* ==========================
* 格式化十进制数
* ==========================
*/
 
/*
* 设置最小整数数字和(精确的)十进制数字。
* 也同样适用于数组、列表或集合
*/
${#numbers.formatDecimal(num,3,2)}
${#numbers.arrayFormatDecimal(numArray,3,2)}
${#numbers.listFormatDecimal(numList,3,2)}
${#numbers.setFormatDecimal(numSet,3,2)}
 
/*
* 设置最小整数数字和(精确的)小数位数, 以及小数分隔符。
* 也同样适用于数组、列表或集合
*/
${#numbers.formatDecimal(num,3,2,'COMMA')}
${#numbers.arrayFormatDecimal(numArray,3,2,'COMMA')}
${#numbers.listFormatDecimal(numList,3,2,'COMMA')}
${#numbers.setFormatDecimal(numSet,3,2,'COMMA')}
 
/*
* 设置最小整数数字和(精确的)十进制数字, 以及千位和十进制分隔符。
* 也同样适用于数组、列表或集合
*/
${#numbers.formatDecimal(num,3,'POINT',2,'COMMA')}
${#numbers.arrayFormatDecimal(numArray,3,'POINT',2,'COMMA')}
${#numbers.listFormatDecimal(numList,3,'POINT',2,'COMMA')}
${#numbers.setFormatDecimal(numSet,3,'POINT',2,'COMMA')}
 
/*
* ==========================
* 实用方法
* ==========================
*/
 
/*
* 创建一个从x到y的整数序列(数组)
*/
${#numbers.sequence(from,to)}
${#numbers.sequence(from,to,step)}

booleans工具类使用示例

/*
* 评估条件, 类似于 th:if 标签
* 也同样适用于数组、列表或集合
*/
${#bools.isTrue(obj)}
${#bools.arrayIsTrue(objArray)}
${#bools.listIsTrue(objList)}
${#bools.setIsTrue(objSet)}
 
/*
* 用否定来评估条件
* 也同样适用于数组、列表或集合
*/
${#bools.isFalse(cond)}
${#bools.arrayIsFalse(condArray)}
${#bools.listIsFalse(condList)}
${#bools.setIsFalse(condSet)}
 
/*
* 评估条件并执行与操作
* 接收数组、列表或集合作为参数
*/
${#bools.arrayAnd(condArray)}
${#bools.listAnd(condList)}
${#bools.setAnd(condSet)}
 
/*
* 评估条件并执行或操作
* 接收数组、列表或集合作为参数
*/
${#bools.arrayOr(condArray)}
${#bools.listOr(condList)}
${#bools.setOr(condSet)}

arrays工具类使用示例

/*
* 转换为指定组件类的数组。
*/
${#arrays.toStringArray(object)}
${#arrays.toIntegerArray(object)}
${#arrays.toLongArray(object)}
${#arrays.toDoubleArray(object)}
${#arrays.toFloatArray(object)}
${#arrays.toBooleanArray(object)}
 
/*
* 计算数组长度
*/
${#arrays.length(array)}
 
/*
* 检查数组是否为空
*/
${#arrays.isEmpty(array)}
 
/*
* 检查数组中是否包含元素或元素集合
*/
${#arrays.contains(array, element)}
${#arrays.containsAll(array, elements)}

lists工具类使用示例

/*
* 计算大小
*/
${#lists.size(list)}
 
/*
*/
${#lists.isEmpty(list)}
 
/*
* 检查list中是否包含元素或元素集合
*/
${#lists.contains(list, element)}
${#lists.containsAll(list, elements)}
 
/*
* 排序给定列表的副本。列表的成员必须
* 实现comparable, 或者必须定义comparator。
*/
${#lists.sort(list)}
${#lists.sort(list, comparator)}

sets工具类使用示例

/*
* 计算大小
*/
${#sets.size(set)}
 
/*
* 检查set是否为empty
*/
${#sets.isEmpty(set)}
 
/*
* 检查set中是否包含元素或元素集合
*/
${#sets.contains(set, element)}
${#sets.containsAll(set, elements)}

maps工具类使用示例

/*
* 计算大小
*/
${#maps.size(map)}
 
/*
* 检查map是否为空
*/
${#maps.isEmpty(map)}
 
/*
* 检查map中是否包含key/s或value/s
*/
${#maps.containsKey(map, key)}
${#maps.containsAllKeys(map, keys)}
${#maps.containsValue(map, value)}
${#maps.containsAllValues(map, value)}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java集合中ArrayList、LinkedList异同(面试题)

为什么一般都使用 List list new ArrayList() ,而不用 ArrayList alist new ArrayList()呢&#xff1f; 1. 问题就在于List有多个实现类&#xff0c;如 LinkedList或者Vector等等&#xff0c; 现在你用的是ArrayList&#xff0c;也许哪一天你需要换成其它的实现类呢&#xf…

自定义异常

打开搜索界面&#xff0c;快捷键:双击shift键盘 如何创立一个自己定义简单的异常&#xff0c;如下: 1&#xff0c;先用extends继承Exception&#xff08;总异常类&#xff09;然后定义私有类变量 2&#xff0c;用快捷键&#xff1b;latinsert 选择构造器&#xff08;Constru…

Python+Requests+Unittest接口自动化测试

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点&#xff1a; 优点&#xff1a; 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高&#xff1f; 因为前端页面变化太快&#xff0c;而且UI自动化比较耗时&#xff08;比如等待页面元素的…

C高级 day37

1、编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOME的值…

ESP32 S3-OLED显示小数函数

ESP32 S3 ardino平台&#xff0c;配中景园7针0.96OLED屏显示小数 OLED网上的驱动代码一般厂商发货会提供驱动程序&#xff0c;但是显示小数很多都没有编写。这里编写了一段可显示任意位小数的代码&#xff08;以正点原子代码为基础&#xff09;&#xff0c;需要显示有符号的小数…

HDFS读写流程

读数据流程 客户端向NameNode请求文件的位置&#xff1a;客户端想要访问一个文件时&#xff0c;会向NameNode发送一个请求&#xff0c;要求获取该文件在HDFS上的位置信息。 NameNode将位置信息返回给客户端&#xff1a;NameNode接收到客户端的请求后&#xff0c;会返回该文件所…

【人脸检测0】视频分解图片与图片合成视频

一,引言 目标:这小节主要通过两个demo熟悉视频分解图片与图片合成视频的OpenCV的应用 环境:python3.6+OpenCV3.3.1 二,示例 Demo1:视频分解图片 目标: 1.指定文件夹中读取视频文件 2.将视频文件分解为图片 3.将图片保存在指定文件夹中 # -*-coding:utf-8-*- #auth…

Eureka配置文件详解

Eureka配置文件详解 文章目录 Eureka配置文件详解一、Eureka instance 配置项&#xff1a;二、Eureka Client 配置项三、Eureka Dashboard仪表板配置项四、Eureka Server配置项4.1 server与client关联配置4.2 server 自定义实现的配置4.3 server 与 remote 关联的配置4.4 serve…

《计算机图形学基础教程(孔令德)》期末考试-复习重点

文章目录 第一章&#xff08;重点&#xff09;&#xff1a;考概念1. 计算机图形的两种表示方法 P52. 计算机图形学、模式识别、计算机视觉等等之间的关系 P63. 计算机图形学的研究内容 &#xff08; 笔记P7 &#xff09;4. 发展历史 P75. 图形显示设备的发展 P96. 相关名词解释…

导入动画

资料 Rig Animation Unity性能优化 参数设置建议 Animation Type 不存在动画选择None;非人形动画选择Generic;人形动画可选择Generic或Humanoid。 需要反向动力学或动画重定向使用Humanoid&#xff0c;其他情况可使用Generic 骨骼数目相差不大时&#xff0c;Generci比Humano…

GWAS:表型的标准化(the normalization of phenotype)

GWAS表型的标准化方法一般有Quantile normalization、Inverse rank normalization、Z-score normalization等。 各自区别如下&#xff1a; 一、Quantile normalization 该方法将每个样本中表型值进行排序&#xff0c;然后将其规范化到一个标准分布&#xff0c;通常是正态分布…

uniapp多级联动选择器,区域选择组件分享

uniapp官方的多级联动选择器效果怎么样就不多说了&#xff0c;一言难尽。。。。 然后我对比了多个组件库&#xff0c;发现了uview组件库&#xff0c;里面有个picker选择器还可以&#xff0c;这是链接 但是在使用过程中也发现了该组件的一些问题 1、操作栏只能显示在顶部&…

MAC搭建M1环境的stable-diffusion

MAC M1 搭建 stable-diffusion 环境 文章目录 MAC M1 搭建 stable-diffusion 环境环境准备1. 硬件环境2. 系统环境3. 基础软件环境 主要参考资料操作步骤1. 下载git2. 下载conda3. 创建python环境4. 下载仓库5. 安装依赖6. 转换模型7. 验证和测试8. 构造Web界面9. 测试WebUI10.…

2023软件测试面试热点问题,3天刷完你的软件测试就牛了~

与开发工程师相比&#xff0c;软件测试工程师前期可能不会太深&#xff0c;但涉及面还是很广的。 在一年左右的实习生或岗位的早期面试中&#xff0c;主要是问一些基本的问题。 涉及到的知识主要包括MySQL数据库的使用、Linux操作系统的使用、软件测试框架问题、测试环境搭建问…

2022电工杯数学建模B题解题思路(5G 网络环境下应急物资配送问题)

一、前言 本文是对2022年第十四届 “电工杯” 高校数学建模挑战赛B题&#xff1a;5G 网络环境下应急物资配送问题的解题思路&#xff0c;希望能够对正在学习数学建模或者研究该类问题的读者提供帮助。作者在当届的比赛中&#xff0c;获得了本科组三等奖的成绩&#xff…

【新星计划·2023】Linux是什么?它与Windows有什么区别?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、Linux是什么&#xff1f; 二、Linux的应用领域 1、服务器领域 2、嵌入式领域 3、虚拟化 三、Linux的未来 1、云计算 2、大数…

Nmap中NSE数据文件分析

Nmap中NSE数据文件分析 1.Nmap中数据文件所在的位置2.暴力穷举时所使用的用户名和密码列表数据文件3.Web应用审计数据文件http-fingerprints.luahttp-sql-errors.lsthttp-web-files-extensions.lsthttp-devframework-fingerprints.luahttp-folders.txtvhosts-default.lstwp-plu…

S32K146入门 遇到 DefaultISR

S32K146入门 遇到 DefaultISR 1、芯片型号没有选对&#xff0c;pin管脚匹配不对 比如我使用的是S32K146HFMLQ&#xff0c;100pin&#xff0c;就要选择对应的型号 2、时钟配置不对 开发板是外部晶振8M&#xff0c;类型要选对。 我选择外部时钟给信号&#xff0c;导致一直出…

Linux使用NDK编译libtiff库并移植到Android平台

1.系统要求: ubuntu 20.04 LTS桌面版本 2.下载libtiff源码: 打开libtiff官方网站 ,打开libtiff源码仓库 http://www.simplesystems.org/libtiff/ 复制下载仓库地址: 克隆源码到本址: git clone --recursive https://gitlab.com/libtiff/libtiff.git 进入源码目录 3.安装…

软件测试需不需要懂代码?

无论是刚入测试行业的萌新&#xff0c;还是已经在测试行业闯荡了两三年的小司机们&#xff0c;都会琢磨一个问题&#xff1a;如果要持续发展下去&#xff0c;我要不要懂代码&#xff1f; 在软件测试初级阶段&#xff0c;不需要编程能力。但是任何一个职业&#xff0c;都会追求…