spring boot -thymeleaf的基本使用和常见问题

thymeleaf简介

thymeleaf是一个的java的模板引擎,能用来解析html,css.xml和纯文本。它是spring boot推荐使用的作为jsp的代替品,它比jsp更快,在没有被解析的情况下,仍然可以作为html文件展示。

spring boot thymeleaf 配置

引入相关依赖

    
    		org.springframework.boot
    		spring-boot-starter-parent
    		2.0.2.RELEASE
    	
    	
    	
    	    UTF-8
    	    
    	    3.0.10.RELEASE
    	    2.0.0
    	    
    	    1.8
    	  
    
    	
    
    		
    			org.springframework.boot
    			spring-boot-starter-web
    		
    
    		
                org.springframework.boot
                spring-boot-starter-test
                test
            
    			

    		
    	      org.springframework.boot
    	      spring-boot-starter-thymeleaf
    	    
    
   
    	

由于spring-boot支持自动装配,再引入依赖后,会自动配置需要thymeleaf相关的bean。
propeties自动装配属性配置

spring.thymeleaf.cache=false # 是否开启缓存,开发中设置成false,便于更改文件后,自动刷新
spring.thymeleaf.check-template=true # 检查模板是否存在
spring.thymeleaf.enabled=true # 是否启用thymeleaf作为视图解析
spring.thymeleaf.enable-spring-el-compiler=false # 是否spring el 表达式
spring.thymeleaf.encoding=UTF-8 # 模板文件编码
spring.thymeleaf.excluded-view-names= # 指定不解析的视图名以逗号分隔,
spring.thymeleaf.mode=HTML # 解析的模板类型
spring.thymeleaf.prefix=classpath:/templates/ # 模板文件路径前缀
spring.thymeleaf.servlet.content-type=text/html # 输出类型
spring.thymeleaf.suffix=.html # 文件后缀
#使用在thymeleaf使用消息表达式语法时#{xx},需指定文件名
spring.messages.basename=application

以上属性spring boot都有默认值
我们将模板放置于classpath:/templates/下
spring boot -thymeleaf的基本使用和常见问题_第1张图片

thymeleaf语法

在html标签中加入如下thymeleaf的命名空间,模板才能解析


如果不加这个声明,下面所有的th:*标签,都要加上data前缀才能被解析。

使用文本 th:text
th:text的内容会将原来的内容替换掉

hello

hello

hello

单引号之间都是纯文本,||之间表示格式话文本内容,可以配合$,#符号,而无需是用+号拼接字符串

信息表达式
使用#{xx},xx表示properties文件中的属性。
模板中要用到的属性需要在application.properties文件中指定配置的文件名。
spring.messages.basename=application
属性还能动态添加参数
spring boot -thymeleaf的基本使用和常见问题_第2张图片

可以配合$使用。

$表达式

和el表达式用法相似,
下面几个是获取变量scope的对象
#ctx: the context object.
#vars: the context variables.
#locale: the context locale.
#request: (only in Web Contexts) the HttpServletRequest object.
#response: (only in Web Contexts) the HttpServletResponse object.
#session: (only in Web Contexts) the HttpSession object.
#servletContext: (only in Web Contexts) the ServletContext object.
具体用法如下

@RequestMapping("/hello/thymeleaf")
    public String index(Integer id,ModelMap map,HttpSession session,HttpServletRequest request) {
    	int[] arr = {1,2,3};
    	map.addAttribute("arr",arr);
    	map.addAttribute("name","ly");
        map.addAttribute("host", "http://blog.didispace.com");
        session.setAttribute("student",new Student("ly",24));
        //map.addAttribute("title","在学习spring boot");
        return "index";
    }

*表达式

*{xx}需配合th:object标签使用

效果等同于

*表达式会根据名称去th:object的对象中匹配值,不会搜索整个上下文。

@表达式

为a标签特别定制的语法表达式,th:href="@{url(param=xx)}" 括号内带参数,也支持上述语法。
url路径分绝对路径和相对路径
Page-relative: user/login.html(页面相对路径)
Context-relative: /itemdetails?id=3 (上下文相对路径)
Server-relative: ~/billing/processInvoice (服务器相对路径
Protocol-relative URLs: //code.jquery.com/jquery-2.0.3.min.js(协议相对路径)


	click

th:if判断表达式

th:if用来执行判断表达式

1!=1

th:each迭代表达式

跟jsp的foreach很相似,

更多详细用法参照文档
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#iteration

你可能感兴趣的:(springboot)