Thymeleaf使用小结

010_SpringBoot视图层技术thymeleaf-变量输出与字符串操作 一. Thymeleaf变量输出 1. th:text在页面中输出变量。 2. th:value将变量输出到input标签的value中。 二. Thymeleaf字符串操作 1. Thymeleaf调用内置对象一定要用#, 大部分的内置对象都以s结尾strings、numbers、dates。 2. ${#strings.isEmpty(msg)}判断字符串是否为空, 如果为空返回true, 否则返回false。 3. ${#strings.contains(msg, 'a')}判断字符串是否 阅读详情

前言:

最近在写一个SpringBoot的博客系统,使用的是Thymeleaf模板,所以大致学习了一下其一些常用的点,这里记录一下,以后会不断补充。
参考自:https://www.cnblogs.com/msi-chen/p/10974009.html

自动配置

自动给我们默认分配了模版的前缀和后缀,我们只需要按部就班的将模版丢进去即可
springboot自动配置如果需要修改自动配置的前后缀,可以在配置文件中如(application.properties或application.yml)修改,如果使用application.properties,那么直接使用自动配置类中的prefix加要修改的属性值修改即可,如spring.thymeleaf.DEFAULT_PREFIX=classpath:/static

常用语法

变量

Thymeleaf通过${}来获取model中的变量,注意这不是el表达式,而是ognl表达式,但是语法非常像。
示例:
控制器:

@GetMapping("/test")
	public String test(Model model) {
		// 这里我模仿从数据库中取到的type用作示例
		Type type = new Type();
		type.setTypeName = "Java";
		model.addAttribute("type",type);
		return "demo";
	}

前台部分demo.html:

...
<!--感觉跟el表达式差不多的。区别在于,我们的表达式写在一个名为:th:text的标签属性中,这个叫做指令-->
<div class="item"  th:text="${type.typeName}">错误日志</div>
...

这里我省略了很多无关紧要的,然后这个div中显示的就是我控制器中加入model的数据type的typeName了。
这里讲下指令吧:
Thymeleaf崇尚模板是纯正的html代码,脱离模板引擎,在纯静态环境也可以直接运行。现在如果我们直接在html中编写 ${}这样的表达式,显然在静态环境下就会出错,这不符合Thymeleaf的理念。

Thymeleaf中所有的表达式都需要写在"指令"中,指令是HTML5中的自定义属性,在Thymeleaf中所有指令都是以th:开头。因为表达式${user.name}是写在自定义属性中,因此在静态环境下,表达式的内容会被当做是普通字符串,浏览器会自动忽略这些指令,这样就不会报错了。

如果我们不经过SpringMVC,而是直接用浏览器打开编写的页面:在静态环境下,th指令不会被识别,但是也不会报错,而是显示div标签的缺省默认值:“错误日志”

指令的设计,正是Thymeleaf的高明之处,也是它优于其它模板引擎的原因。动静结合的设计,使得无论是前端开发人员还是后端开发人员可以完美契合。

另外,th:text指令出于安全考虑,会把表达式读取到的值进行处理,防止html的注入。
例如,<p>你好</p>将会被格式化输出为 l t ; p lt;p lt;pgt;你好 l t ; / p lt;/p lt;/plt;。
如果想要不进行格式化输出,而是要输出原始内容,则使用th:utext来代替。

变量的语法糖

刚才获取变量值,我们使用的是经典的对象.属性名方式。但有些情况下,我们的属性名可能本身也是变量,怎么办?

ognl提供了类似js的语法方式:

例如:${user.name} 可以写作${user['name']}

接下来讲的是自定义变量:
先看原始示例:

<h2>
    <p>Name: <span th:text="${user.name}">Jack</span>.</p>
    <p>Age: <span th:text="${user.age}">21</span>.</p>
    <p>friend: <span th:text="${user.friend.name}">Rose</span>.</p>
</h2>

是不是觉得比较麻烦,对于这种都是来自一个变量的属性,有另一种简便的方法:

<h2 th:object="${user}">
    <p>Name: <span th:text="*{name}">Jack</span>.</p>
    <p>Age: <span th:text="*{age}">21</span>.</p>
    <p>friend: <span th:text="*{ufriend.name}">Rose</span>.</p>
</h2>

首先在 h2上 用 th:object="${user}"获取user的值,并且保存。

然后,在h2内部的任意元素上,可以通过 *{属性名}的方式,来获取user中的属性,这样就省去了大量的user.前缀了。

方法调用

这个我暂时没有碰到,暂不总结。

内置对象

Thymeleaf中提供了一些内置对象,并且在这些对象中提供了一些方法,方便我们来调用。获取这些对象,需要使用#对象名来引用。和jsp类似,有session、servletContext、request等,如:
第一种:一些环境相关对象

对象作用
#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集合的方法

我分别举个例子吧,不过现在还是不太清楚什么时候加#,emmm,后面改进吧:

先看获取session中的值(另外平常放置于ModelAndView,Model,Map,ModelMap中的数据都存在request,默认是从request中取数据的,所以request的数据不用加request前缀。)

<div class="text">
	<img th:src="@{${session.user.headImage}}"class="ui avatar image" /><span th:text="${session.user.nickName}">LSY</span> 
</div>

${session.user.headImage}和${session.user.nickName}这个就是获取session中的值(不过这里好像不用加#)
再看全局对象#strings的示例吧:

<div th:unless="${#strings.isEmpty(message)}" th:text="${message}">用户名和密码错误</div>

这里先不管th:unless,${#strings.isEmpty(message)}就是判断message是不是空的。

拼接普通字符串与对象值

我们经常会用到普通字符串与表达式拼接的情况:

<span th:text="'欢迎您:' + ${user.name} + '!'"></span>

字符串字面值需要用’’,拼接起来非常麻烦,Thymeleaf对此进行了简化,使用一对|即可:

<span th:text="|欢迎您:${user.name}|"></span>

运算

需要注意:${}内部的是通过OGNL表达式引擎解析的,外部的才是通过Thymeleaf的引擎解析,因此运算符尽量放在${}外进行。

算术运算

支持的算术运算符:+ - * / %

<span th:text="${user.age}"></span>         //21
<span th:text="${user.age}%2 == 0"></span>  //false

比较运算

支持的比较运算:>, <, >= and <= ,但是>, <不能直接使用,因为xml会解析为标签,要使用别名。

注意 == and !=不仅可以比较数值,类似于equals的功能。

可以使用的别名:gt (>), lt (<), ge (>=), le (<=), not (!). Also eq (==), neq/ne (!=).

条件运算

三元运算

<span th:text="${user.sex} ? '男':'女'"></span>

或这个类似的

<form action="#" method="post" th:object="${type}"
				th:action="*{id}==null ? @{/admin/types} : @{/admin/types/{id}(id=*{id})} "
				class="ui form">
				...

默认值

有的时候,我们取一个值可能为空,这个时候需要做非空判断,可以使用 表达式 ?: 默认值简写:

<span th:text="${user.name} ?: '二狗'"></span>

当前面的表达式值为null时,就会使用后面的默认值。注意:?:之间没有空格。

还有一种我遇到的类似三元的:

<a href="#" th:href="@{/admin/blogs}"
					class=" m-item item m-mobile-hide"
					th:classappend="${n==1} ? 'active'"><i class="mini home icon"></i>博客</a>

th:classappend="${n==1} ? ‘active’"的意思为当n等于1时,给这个a标签加一个class属性active,否则不加。

循环

循环也是非常频繁使用的需求,我们使用th:each指令来完成:

假如有用户的集合:users在Context中。

<tr th:each="user : ${users}">
    <td th:text="${user.name}">Onions</td>
    <td th:text="${user.age}">2.41</td>
</tr>

${users} 是要遍历的集合,可以是以下类型:

Iterable,实现了Iterable接口的类

Enumeration,枚举

Interator,迭代器

Map,遍历得到的是Map.Entry

Array,数组及其它一切符合数组结果的对象

在迭代的同时,我们也可以获取迭代的状态对象:

<tr th:each="user,stat : ${users}">
	<td th:text="${stat.count}">1</td>
    <td th:text="${user.name}">Onions</td>
    <td th:text="${user.age}">2.41</td>
</tr>

stat对象包含以下属性(我实际上使用好像也可以用iterStat,暂时没感觉到区别):

index,从0开始的角标

count,元素的个数,从1开始

size,总元素个数

current,当前遍历到的元素

even/odd,返回是否为奇偶,boolean值

first/last,返回是否为第一或最后,boolean值

逻辑判断

有了if和else,我们很简单的实现很多我们想要实现的功能。Thymeleaf中使用th:if 或者 th:unless ,两者的意思恰好相反。

<span th:if="${user.age} > 24">老油条</span>

如果表达式的值为true,则标签会渲染到页面,否则不进行渲染。

以下情况被认定为true:

表达式值为true

表达式值为非0数值

表达式值为非0字符

表达式值为字符串,但不是"false",“no”,“off”

表达式不是布尔、字符串、数字、字符中的任何一种

其它情况包括null都被认定为false

JS模板

模板引擎不仅可以渲染html,也可以对JS中的进行预处理。而且为了在纯静态环境下可以运行,其Thymeleaf代码可以被注释起来:

function loadata() {
				// load() 方法通过 AJAX 请求从服务器加载数据,并把返回的数据放置到指定的元素中。
				$("#table-container").load(/*[[@{/admin/blogs/search}]]*/"/admin/blogs/search",{
					title : $("[name='title']").val(),
					typeId : $("[name='typeId']").val(),
					isRecommend : $("[name='recommend']").prop('checked'),
					page : $("[name='page']").val()
				}
						
				
				
				);
			}

如果需要在js中获取值,则如下所示:

<script th:inline="javascript">

		// 这里最后部署的公网的域名这里要改
		var serurl = /*[[#{blog.serurl}]]*/"127.0.0.1:8080";
		var url = /*[[@{/blog/{id}(id=${blog.id})}]]*/"";
		var qrcode = new QRCode("qrcode", {
			text : serurl+url,
			width : 110,
			height : 110,
			colorDark : "#000000",
			colorLight : "#ffffff",
			correctLevel : QRCode.CorrectLevel.H
		});

		
		
		
		// 当页面加载后请求评论数据
		$(function () {
			$("#comment-container").load(/*[[@{/comments/{id}(id=${blog.id})}]]*/"/comments/6");
		})

		
		
	</script>

获取值首先需要在script标签中声明th:inline="javascript“,然后通过这种方式var serurl = /*[[#{blog.serurl}]]*/"127.0.0.1:8080";即/[[${}]]/就可以获取到了。

其他

还有一些指令如:

如果想在路径中加入参数呢?在thymeleaf中,使用()来实现这一功能,如下图,在路径的最后加入(id=xxx),thymeleaf会在前端渲染成?id=xxx。当多个参数时,以逗号分隔,写成(id=xxx,name=xxx)之类的形式即可。

<a href="#" th:href="@{/admin/types(page=${page.number}-1)}" class="  item" th:unless="${page.first}">上一页</a>

如果参数不仅仅是写在最后方,想写在路径中间,实现类似restful风格的效果,就可以看下面代码:

<td>
              <a href="#" th:href="@{/admin/types/{id}/input(id=${type.id})}" class="ui mini teal basic button">编辑</a>
              <a href="#" th:href="@{/admin/types/{id}/delete(id=${type.id})}" class="ui mini red basic button">删除</a>
</td>

然后怎么获取这两种得值呢?:
对于th:href="@{/admin/types(page=${page.number}-1)}"即实际效果近似为/admin/types?page=3,这种方式其实就是表单(Get方式)提交的值的获取方式。在controller得获取方式是:

    @GetMapping("/admin/types")
    public String test(@RequestParam("page")String page){
    
        return "demo";
    }

对于th:href="@{/admin/types/{id}/input(id=${type.id})}"这种,即实际效果近似为/admin/types/3 ,就如下所示“

@GetMapping("/admin/types/{id}/input")
    public String test(@PathVariable("id") String id){
        return "demo";
    }

另外,springboot从前台获取值还有一种情况即前台传json值,此时需要使用@RequestBody接受,这个我没有尝试过,有兴趣得可以自行测试。这里推荐一个博主关于这个知识点得介绍:@RequestBody的使用



这个是用来做片段的替换的,先写一个_fragment.html,将一些要统一替换的片段写在_fragment.html中,并声明一些东西,就可以达到替换的效果。这里由于篇幅过长,暂不总结…

<head th:replace="_fragments :: head(~{::title})">

这个th:href就是起到运行后用这个路径替换本来的href,还有th:src功能也类似

<a href="#" th:href="@{/admin/blogs}"><a/>
<!--  其中data-page这个就是自定义的属性,你可以定义成任何你想要的格式比如data-ceshi,然后在js文件中使用jquery的$(this).data('ceshi')获取到(另外,使用自定义属性,data-的后面尽量不要使用大写,可能会取不到值)
	然后这里前面加th:attr=的原因是${page.number}-1这个值是thymeleaf中的,必须加这个data-page才能获取到数据-->
	<a onclick="page(this)" th:attr="data-page=${page.number}-1" class=" item" th:unless="${page.first}">上一页</a>
    <a onclick="page(this)" th:attr="data-page=${page.number}+1" class=" item" th:unless="${page.last}">下一页</a>


<script>
			
			// 上一页下一页
			function page(obj) {
				$("[name='page']").val($(obj).data("page"));
				loadata();
			}
			
			// 刷新局部
			function loadata() {
				// load() 方法通过 AJAX 请求从服务器加载数据,并把返回的数据放置到指定的元素中。
				$("#table-container").load(/*[[@{/admin/blogs/search}]]*/"/admin/blogs/search",{
					title : $("[name='title']").val(),
					typeId : $("[name='typeId']").val(),
					isRecommend : $("[name='recommend']").prop('checked'),
					page : $("[name='page']").val()
				}
						
				
				
				);
			}
			
			$("#search-btn").click(function () {
				loadata();
			});
			
			
		</script>

还有一个我觉得比较有用的就是<!--/*-->和<!--*/-->之间的内容,在静态时可以被当成普通html,动态时即运行在实际项目中时就会被thymeleaf模板注释掉。

等等。暂时先不写了,后面再完善吧。

SpringBoot+Layui+Thymeleaf+PageHelper实现分页功能 SpringBoot+Layui+Thymeleaf+PageHelper实现分页功能1、导入jar包2、页面3、Controller层4、Service层5、mapper层6、页面展示7、小结 1、导入jar包 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> 阅读详情

相关推荐

SAP ABAP干货:用REUSE_ALV_GRID_DISPLAY_LVC实现ALV多屏幕独立布局(含handle参数详解)

本文详细解析了SAP ABAP中如何使用REUSE_ALV_GRID_DISPLAY_LVC函数实现ALV多屏幕独立布局,重点介绍了handle参数的技术原理和实际应用。通过变式标识符和LTDX表存储机制,开发者可以确保不同ALV报表屏幕的布局设置互不干扰,提升复杂报表场景下的用户体验。

weixin_29268267的博客 311

thymeleaf定义变量等

thymeleaf烂透了。 以前说过,thymeleaf虽然是spring boot推荐的模板,但我认为,它跟asp.net的模板引擎razor比起来,处于幼儿园的水平。其对母板页的理解是有偏差的。razor的模板,就是真的母板,所有公用东西都在母板上,应用页面套用这个母板,只须再定义自己的个性化内容即可。而thymeleaf的所谓模板,不是母板,而是片段集合,公共东西,做成一个个片段,由应用页按...

左直拳的马桶_日用桶 1万+

COMSOL仿真教程—激光烧蚀

本例使用二维模型,将来自激光的入射热通量模拟为金属表面上空间分布的热源,从而得到金属的烧蚀过程和瞬态温度分布。

qq_40977332的博客 2万+

thymeleaf教程笔记(三)-变量表达式

thymeleaf变量表达式

weixin_39972720的博客 1482

FastH3 + vLLM-Omni:MiniMax H3 视频生成本地部署与加速实战

随着多模态大模型在视频生成领域的普及,如何高效部署和加速推理成为工程实践的关键。vLLM作为高性能推理框架,通过PagedAttention和continuous batching显著优化了大模型吞吐;而FastH3则针对特定模型结构进行算子融合和CUDA优化。结合vLLM-Omni对多模态输入的支持,可以将MiniMax H3的视频生成耗时从分钟级压缩至秒级。本文以视频生成模型为例,详细拆解环境配置、推理优化与问题排查,为多模态模型本地部署提供参考。

ciya3282的博客 486

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

sv 937

三、thymeleaf基本语法

三、thymeleaf基本语法

ouyangqing的专栏 1133

2024年 Flutter 面试题大全(2024.6.28持续更新中)

2024年 Flutter 面试题大全(持续更新中)

Code Metaverse 6670

SpringBoot——Thymeleaf的表达式

SpringBoot——Thymeleaf的表达式

贝尔摩德苦艾酒 7895

手把手带你完成基于UNet的医学图像分割系统设计与实现,UNet网络架构讲解,UNet复现,使用vibe coding工具,开发一个完整系统,包含完整源码

哈喽,大家好,这里是落花不写码,本次教程讲一下 U-Net 分割篇,U-Net 它是一篇 2015 年发表的论文,那为什么到现在还需要讲呢?因为后续讲到 GAN、扩散模型时候是离不开 U-Net 架构的,所以今天先带大家使用 U-Net 模型完成一些图像分割。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 873

13、核心网络模块:VyOS 设备配置实战

本文详细介绍了如何使用 Ansible 核心网络模块对 VyOS 虚拟设备进行自动化配置,涵盖环境搭建、变量设置、任务编写、playbook 运行及配置验证全过程。通过实际案例展示了 Ansible 在网络设备管理中的强大功能,包括多设备支持、模板化配置、备份回滚等优势,并提供了最佳实践建议与未来发展趋势分析,帮助读者提升网络运维效率。

linux6sysadmin的博客 114

thymeleaf的使用和小结

thymeleaf。

2401_87845453的博客 807

仅使用 Python 创建的 Web 应用程序(前端版本)第03章Streamlit-多页面

接下来,我们将解释多页面切换。Streamlit 没有“多页面”或“页面路由”等功能。另一方面,通过根据用户动作切换要执行的功能,可以使其看起来好像存在“多个页面”。注意:我认为它类似于 SinglePageApplication (SPA)。然而,根据 React、Vue 等中使用的 URL 路径来更改页面的路由很困难。还有一个用于获取查询参数的实验性 API,但如果您确实需要这种功能,我认为认真尝试编写 React 或 Vue 是个好主意。我们来看一个通过按下按钮来切换页面的示例,如下所示。

xianyinsuifeng的博客 1330

thymeleaf使用小结

当前端需要将后台的数据渲染到页面上时,会有很多的渲染方式可以选择。 比如用js渲染,如下: 这种方式本人觉得会使前端代码变得繁冗,而且项目过大时会比较麻烦。(新手上路,看看就行) 而最近的一次交互中使用的是thymeleaf来进行页面的渲染,感觉很简洁,大大节省了代码量。 像这样简单的代码就完成了将数据渲染到页面上的操作,而且对数据的增删改查变得非常简单,上面写的是thymeleaf中的遍历。语法如下 <tr th:each="userStat:${messages.list}">

qq_50646256的博客 1989

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

thymeleaf知识点小结

在Web应用中,我们一般采用MVC设计模式实现对应的模型(M)、视图(V)和控制器©,而视图就是用户看到的并与之交互的界面。而现在的Web应用更倾向于使用动态模板技术,从而实现前后端分离和页面的动态数据展示。而Spring Boot对很多模板技术提供了支持,比如FreeMarker、Groovy、Mustache、thymeleaf。

m0_67587248的博客 178

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Thymeleaf学习小结

1、Thymeleaf是什么? Thymeleaf—简单来说就是一个模板引擎 模板引擎:就是用来操作模板的引擎,就是用来渲染模板的,模板就是页面,就是用来生成页面的,其实具体的就是使用户界面与业务数据(内容)分离 2、基本使用 首先需要引入命名空间 xmlns:th="http://www.thymeleaf.org" 几种基本的使用形式: 引入web静态资源或请求一个页面:@{ } <link th:href="@{/css/bootstrap.min.css}" rel="

m0_46775974的博客 256

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Thymeleaf基本语法小结

Thymeleaf表达式 所有表达式都应该写在HTML5中的自定义属性th中。 变量表达式:变量表达式即OGNL表达式或Spring EL表达式(在Spring中用来获取model attribute的数据)。 如下所示 ${user.name} <span th:text="${text}">你好 thymleaf</span> <span>标签中的内容会被表达式${text}的值所替代,无论模板中它的内容是什么。Thymeleaf的基本变量和JSP一样,都使用${.}表示获取变

weixin_47786053的博客 733

Spring-boot中thymeleaf模板使用小结

近期在使用spring-boot配合thymeleaf开发,在开发过程中踩过不少坑,现在记录一下,防止自己重复踩坑: 1、关于thymeleaf中a标签的href问题:      如果href中有&则必须这样写&否则会报错! 2、对于路径的问题:     如果类的requestMapping中增加了内容比如("/test")那么,当用spring推前台页面的时候,静态资源就加载不成

java-boy的博客 663

项目小结--thymeleaf

1、thymeleaf 获取后台传递的值,显示到前台js中 <script th:inline="javascript"> $(function () { var name=[[${info.name}]]; var age=[[${info.age}]]; }) </script>

qq_41328653的博客 103

thymeleaf中前后端数据交互小结

1. 引入静态资源:th:href或th:scr+@{/从static目录开始}。 2.前端将数据绑定到后端对象:*{对象属性},前端引用后端数据${对象属性} 3.后端将数据传入前端 ModelMap(由框架提供),前端使用${对象属性}。 4.表单提交的注意点。

justisme的博客 2786

springboot+thymeleaf页面跳转坑点小结

1、html中是用来thymeleaf标签,则必须要放在template目录下,否则不解析。同理如果使用了thymeleaf额外集成了shiro标签也一样,都是模板解析器解析就要放在temlpate下。 2、地址解析器如果要使用通配符注意最好使用/**,/*只匹配这一级目录,/**匹配所有子目录及以下。 3、th:src或者th:href使用@{},中间加不加“/”区别就在于@{/xxx.css}代表static目录下的xxx.css。而不加/会读取当前路径在拼接xxx.css。 4、跳转地址写templa

weixin_42203158的博客 719

关于SpringBoot Thymeleaf 模板语言使用小总结

为了不经常鬼畜, 避免来回纠结SpringBoot Thymeleaf语法,总结一下常用语法方便之后自己查询使用。 模板标志: th: js如果有Thymeleaf模板语法,一定在“script”标签中加入识别 th:inline=“javascript”,即: <script th:inline="javascript"> let aRoomTypeList =...

V199311的博客 663

Spring in Acton 4读书笔记之使用Thymeleaf

JSP的缺陷 尽管JSP历史悠久、应用广泛,但它有以下缺陷: 尽管看起来像,但既不是HTML,也不是XML JSP标签库使文档格式不友好 如果JSP标签没有在服务端正确编译后发给浏览器,浏览器由于不理解JSP标签,渲染的结果是一个灾难 JSP标准和servlet耦合,所以JSP只能用于基于servlet的web应用视图。像email或者不基于servlet的web应用就无法使用JSP 由于JSP有以上缺陷,许多模板试图取代JSP,而其中Thymeleaf是一个令人兴奋的选择。Thymeleaf自然,不依

谈谈IT 169

ThymeLeaf简单介绍

大家好,我是IT修真院,一枚正直纯洁善良的如刚入门的Java程序员,今天跟大家分享一下修真院官网JAVA任务十,深度思考中的知识点———— 1.知识背景 Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等, 它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比, T...

creatill的博客 2万+

Thymeleaf基本使用

介绍 官网:https://www.thymeleaf.org/ Thymeleaf是一个用于Web和独立环境的现代服务器端Java模板引擎。 简单示例 打开IDEA,创建一个maven工程(quickstart archetype)·。 在pom.xml文件中导入依赖,目前最新版本3.0.15: <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf<

CamphorBlossom的博客 2万+
上一篇: SpringMVC接受前台传值
下一篇: JS中$().form失效解决办法
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值