范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBoot实战视图技术Thymeleaf

  前言
  在一个Web应用中,通常会采用MVC设计模式实现对应的模型、视图和控制器,其中,视图是用户看到并与之交互的界面。对最初的Web应用来说,视图是由HTML元素组成的静态界面;而后期的Web应用更倾向于使用动态模板技术,从而实现前后端分离和页面的动态数据展示。Spring Boot框架为简化项目的整体开发,提供了一些视图技术支持,并主要推荐整合模板引擎技术实现前端页面的动态化内容。本文对SpringBoot常用的Thymeleaf进行整合。Thymeleaf基本语法
  Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向Java的XML、XHTML、HTML5页面模板,它具有丰富的标签语言、函数和表达式,在使用Spring Boot框架进行页面设计时,一般会选择 Thymeleaf模板。我们在这里学习Thymeleaf 常用的标签、表达式。常用标签标签
  Thymeleaf标签
  th:标签
  说明
  th:insert
  页面片段包含(类似JSP中的include标签)
  th:replace
  页面片段包含(类似JSP中的include标签)
  th:each
  元素遍历(类似JSP中的c:forEach标签)
  th:if
  条件判断,条件成立时显示th标签内容
  th:unless
  条件判断,条件不成立时显示内容
  th:switch
  条件判断,进行选择性匹配
  th:case
  th:switch分支,选择的元素
  th:object
  用于替换对象
  th:with
  用于定义局部遍历
  th:attr
  用于属性修改
  th:attrprepend
  通用属性修改,将计算结果追加前缀到现有属性值
  th:attrappend
  通用属性修改,将计算的结果追加后缀现有属性值
  th:value
  属性值修改,指定标签属性值
  th:href
  用于设定链接地址
  th:src
  用于设定链接地址
  th:text
  用于指定标签显示文本内容
  th:utext
  用于指定标签显示内容,对特殊标签不转译
  th:fragment
  声明片段
  th:removve
  移除片段如何使用标签
  使用标签只需要加上一个命名空间就可以了。 即修改原html的第二行就可以了。复制代码123456789101112131415161718HTML           Good Thymes Virtual Grocery                         

Welcome to our grocery store! 标准表达式   表达式   说明   ${..}   变量表达式   *{..}   选择变量表达式   #{..}   消息表达式   @{..}   链接URL表达式   ~{..}   片段表达式变量表达式   变量表达式${..}主要用于获取上下文中的变量值,示例代码如下。   这是标题   - 使用了Thymeleaf模板的变量表达式${..}用来动态获取p标签中的内容 - 如果当前程序没有启动或者当前上下文中不存在title变量,该片段会显示标签默认值"这是标题"; - 如果当前上下文中存在title 变量并且程序已经启动,当前p标签中的默认文本内容将会被tite变量的值所替换,从而达到模板引擎页面数据动态替换的效果。   Thymeleaf为变量所在域提供了一些内置对象   内置对象   说明   #ctx   上下文对象   #vars   上下文变量   #locale   上下文区域设置   #request   (仅限 Web Context)HttpServletRequest 对象   #response   (仅限Web Context)HttpServletResponse 对象   #session   仅限Web Context) HttpSession对象   #servletContext   (仅限 Web Context)ServletContext 对象   结合上述内置对象的说明,假设要在Thymeleaf模板擎页面中动态获取当前国家信息,可以使用#locale内置对象复制代码1LANGUAGE-BASHChina 选择变量表达式   选择交量表达式和变量表达式用法类似,一般用于从被选定对象而不是上下文中获取属性值,如果没有选定对象,则和变量表达式一样,示例代码如下。复制代码12345LANGUAGE-XML

Name: Sebastiahk

username:Pepper

Nationality:Saturn. ${#object.firstName}变量表达式使用Thymeleaf模板提供的内置对象object获取当前上下文对象中的frstName属性值; {session.user.lastName}变量表达式获取当前user对象的lastName属性值;*{nationality}选择变量表达式获取当前指定对象user的nationality属性值。消息表达式   消息表达式#{..}主要用于Thymeleaf模板页面国际化内容的动态替换和展示。使用消息表这式#{..}进行国际化设置时,还需要提供一些国际化配置文件。关于消息表达式的使用,下文写国际化时会详细说明。链接表达式   链接表达式@{..}一般用于页面跳转或者资源的引入,在Web开发中占据着非常重要的地位,并且使用也非常频繁。复制代码12LANGUAGE-BASHview view @{..}分别编写了绝对链接地址和相对链接地址。在有参表达式中,需要按照@(路径(参数名称=参数值.参数名称=参数值..))的形式编写,同时该参数的值可以使用变量表达式来传递动态参数值。片段表达式   片段表达式~{..}是一种用来将标记片段移动到模板中的方法。其中,最常见的用法是使用th:insert或th:replace 属性插入片段复制代码1LANGUAGE-CSS th:insert属性将title片段模板引用到该标签中。thymelcafDemo为模板名称,Thymeleal会自动查找"classpathy/resources/templates/"目录下的thymeleaDemo模板,title为声明的片段名称。Thyemleaf基本使用静态资源访问   Spring Boot默认设置了静态资源的访问路径,默认将/**所有访问映射到以下目录。classpath:/META-INF/resources/:项目类路径下的META-INF文件夹下的resources文件夹下的所有文件。classpath:/resources/:项目类路径下的resources文件夹下的所有文件。classpath:/static/:项目类路径下的static文件夹下的所有文件。classpath:/public/:项目类路径下的public文件夹下的所有文件。Spring Initializr 方式创建的 Spring Boot 项目会默认生成一个 resources目录,在resources目录中新建public、resources、static3个子目录,Spring Boot默认会依次从public、resources、static里面查找静态资源。Thymeleaf页面展示   我们创建一个springboot项目用于本次实验。项目名为springboot_01_thyme。java8,springboot2.6.6导入Thymeleaf依赖复制代码1234LANGUAGE-XML org.springframework.boot spring-boot-starter-thymeleaf 编写配置文件复制代码12345678LANGUAGE-INI # thymeleaf cache spring.thymeleaf.cache=false spring.thymeleaf.encoding=utf-8 spring.thymeleaf.mode=HTML5 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html 创建WEB控制类   创建一个LoginController类用于数据替换效果测试。复制代码1234567891011121314151617LANGUAGE-KOTLINpackage com.hjk.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import java.util.Calendar; @Controller public class LoginController { @GetMapping("toLoginPage") public String toLoginPage(Model model){ model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR)); return "login"; } } 创建模板页面并引入静态资源   我们写一个login.html进行测试。我们导入一个bootstrap的样式到static/login里面,并且自己定义一些css。复制代码1234567891011121314151617181920212223242526272829303132333435363738394041424344LANGUAGE-XML 用户登录界面 我们使用xmlns:th="http://thymeleaf.org"引入Thymeleaf标签通过th:href引入外联css通过th:text后台动态传递年份currentYear   最后我们通过访问http://localhost:8080/toLoginPage 可以查看效果配置国际化页面编写多语言配置文件   在resources目录下创建名为i18n的文件夹,数一数这个单词多少个字母internationalization,就知道为什么叫i18n了。   然后我们在i18n文件夹下面创建login.properties、 login_zh_CN.properties、 login_en_US.properties文件。   目录结构:这个Resource Bundle "login"时idea自动创建的,我们不需要管,只需要完成我们的就行。   login.properties复制代码123456LANGUAGE-INIlogin.tip=请登录 login.username=用户名 login.password=密码 login.rememberme=记住我 login.button=登录   login_zh_CN.properties复制代码12345LANGUAGE-INIlogin.tip=请登录 login.username=用户名 login.password=密码 login.rememberme=记住我 login.button=登录   login_en_US.properties复制代码12345LANGUAGE-INIlogin.tip=Please sign in login.username=Username login.password=Password login.rememberme=Rememberme login.button=Login   然后我们在配置文件application.properties里面添加代码这个是我们必须要写的,login是我们的语言文件前缀,springboot默认前缀是messages,所以不写识别不了。   spring.messages.basename=i18n.login定制区域信息解析器   我们在config包下面创建一个MyLocalResovel类,自定义国际化功能区域信息解析器。复制代码12345678910111213141516171819202122232425262728293031323334353637383940LANGUAGE-TYPESCRIPTpackage com.hjk.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; @Configuration public class MyLocalResovel implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { String parameter = request.getParameter("1"); String header = request.getHeader("Accept-Language"); Locale locale = null; if (!StringUtils.isEmpty(parameter)){ String[] s = parameter.split("_"); locale = new Locale(s[0], s[1]); }else{ String[] split = header.split(","); String[] split1 = split[0].split("-"); locale = new Locale(split1[0],split1[1]); } return locale; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { } @Bean public LocaleResolver localeResolver(){ return new MyLocalResovel(); } } 注意分割符的两个下滑线,不一样重写login.html实现国际化复制代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546LANGUAGE-XML 用户登录界面   这里我们基本就完成了,但是在访问中文的时候会出现乱码现象。   我们打开idea的file->settings->file Encodings.   将Default encoding for properties的编码改为utf-8,同时勾选Transparentnative-to-ascii conversion   然后我们重新编写login.properties和其他相关的复制代码12345LANGUAGE-INIlogin.tip=请登录 login.username=用户名 login.password=密码 login.rememberme=记住我 login.button=登录   但是这种方法1只对当前项目有效。下次创建还是使用GBK编码总结   本文我们主要了解了Thymeleaf的基本语法、标签、表达式、基本使用、同时还实现了页面登录页得国际化。   本文作者:hjk-airl   本文链接:https://www.cnblogs.com/hjk-airl/p/16181598.html


恒洁卫浴Q9智能马桶智能抑菌,长效杀菌守护家庭如厕健康在现代社会,随着各类知识的普及,越来越多的人注重健康与安全,更有甚者在健康的基础上追求颜值与品质,找到一款称心如意的马桶何其难,不过恒洁Q9智能马桶能够轻松应对这些问题,带来不一样卫浴环境打理得好,生活健康更美好,安全卫浴产品认准恒洁卫生间是每个家庭使用频率最高的空间之一,家庭可以偶尔不用厨房,但没办法不上卫生间。所以,对卫生间产品的挑选不可大意,一定要选择品质好,安全可靠的,恒洁是做卫浴产品的专业国内知名品牌姚振华坚持产城融合策略宝能集团推动太原经济发展姚振华通过产城融合策略,带领宝能集团坚持开发经营管理一体化运作,充分调动和发挥集团产业优势和资源优势,构筑涵盖战略投资产业运营物业开发商用管理金融服务等方面的城市综合开发运营价值生不容错过的华为智慧屏V75Super开售,物超所值现如今,电视行业已全面转向DTV,IPTV,OTT等新型智能方向,所谓智能就是让电视更懂用户,更懂生活!除了常见的语音操作外,还增加人脸,动作等新识别方式,同时通过大数据匹配,让电华为nova9Pro正式发布,总有一个购买理由能够打动你现下许多的年轻人已经不在习惯用文字来记录自己的生活,他们更加喜欢鲜活生动的事物,所以他们喜欢用声音和影像来记录人生美好的时刻,留住生活中美好的瞬间。华为深刻洞察当下消费者的需求,为小方智能可视门铃让访客有迹可循,保护家庭安全!回想起近年来很多入室抢窃事件,不经意觉得安防设备对于每个家庭或者租客来说是非常重要的,发生那些悲剧事件,通常不知道门外面的人是谁,是外卖小哥?快递员?还是?对于单身女性朋友,她们最iPhone12小杯全细节曝光,配置阉割有点严重今年iPhone12系列已经确定有小中大超大杯4个版本,其中小杯必然是最便宜的,根据iPhone历代产品销量来看,最便宜的版本往往都是大家最为关注的,目前小杯的大部分细节已经曝光,华为Mate40多细节曝光,4个升级点非常值得期待最近华为Mate40的爆料也开始越发频繁,不出意外,发布时间与iPhone前后脚,就在本月!从目前爆料来看,这次华为Mate40系列的看点确实要比iPhone12系列更多,那么这次联想推出首款折叠屏幕电脑全面屏设计,售价超ThinkPadX1!继折叠屏手机问世后,联想(Lenovo)也刚刚推出了一款可折叠的windows个人电脑,这款折叠笔记本电脑专为企业高管商务人士以及专业领域人士设计。该可折叠笔记本为目前最受消费者欢专访格莱美获奖工程师ObieOBrien聊AustrianAudio奥世声ObieOBrien是格莱美获奖音频工程师和制作人。此外他也参与过多部好莱坞电影音乐的录制。说起现在的麦克风产品,Obie说,虽然现在有很多人在制造话筒,有些公司只能在一两件方面上MCS联合哈雷机车太原上演ampampquot速度与激情ampampquotMCSx哈雷联合骑行活动太原站上演速度与激情5月22日上午9时30分,意大利服装品牌MCS联合哈雷机车骑行活动在太原王府井百货二期正式拉开序幕,随着40余名身着MCS品牌机车系列帅
最前线裁员潮下,七成互联网员工对年终奖不抱期待36氪获悉,拉勾招聘数据研究院发布近日发布互联网人年终奖期待调查报告,报告显示,71。1的互联网人在去年获得了年终奖金,但仅有43。3的互联网人认为今年会照常发放年终奖,从业者整体马斯克吐槽民众对自动驾驶偏见科学公布2021年度十大科学突破股融易资讯今日话题马斯克吐槽民众对自动驾驶偏见救人时理所应当,出事就被骂特斯拉CEO埃隆马斯克近日在接受采访时谈到了公司因为自动驾驶技术事故受到严格审查的问题。他表示,特斯拉的自动直播电商如何被一步步玩坏来源智先生去年疫情,许多企业喊着要活下去。这边缩衣节食,裁员降薪,为社会释放出一批灵活就业人员,填补了外卖员大军那边做起了跨境电商,区块链投资和电商直播,拥抱时代脉络,迎着浪潮前行宏函数宏函数的区别宏函数宏函数的区别先说宏和函数的区别1。宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型。2。宏骁龙695怎么样?相当于哪款麒麟芯片?最近荣耀X30发布了,其首发骁龙695处理器,不少用户对这款处理器的性能比较好奇,希望知道骁龙695可以和哪款麒麟芯相比,我们先看看骁龙695的规格参数,其采用台积电6nm工艺制作库克始料未及,iPhone13价格确认,发布三个月就跌价700元要说这个世界上最关心苹果iPhone销量的人,那毫无疑问一定是苹果CEO库克了,毕竟苹果的主要收入来源都是依靠了iPhone所带来的,可以在苹果产品线中,只有iPhone是负责赚钱互联网,急需一场拆墙运动天下苦互联网城墙久矣!文丨华商韬略张静波当流量见顶,互联网进入存量时代后,新的增长哪里来?除了深耕业务,更重要的是开放。围墙之下,企业增长如何突破?百度坚定地支持和拥抱互联互通,我为什么ios15。2必须升级,知道这3点你才能恍然大悟我是南郭先生和猫,点击右上方关注,每天为你分享电影与科技的热门动态。经过2天的使用,终于能说说IOS15。2的事了,先上结论,首先这个版本的系统值得升级吗?值得!非常值得!除了系统菠萝mini矿机带你走向致富之路菠萝MINIV版本运算服务器采用自研高性能计算芯片,算力优秀,搭配先进的降噪功能,高效静音,低功耗却有好表现,在家也能拥有属于自己的私人运算服务器。无需连接电脑,插上网线即可使用,七2022年投资的行业风口(一)12021年新能源风口解析(结合前两节课内容实战)如果关注股市的各位应该知道,2021年的主线就是新能源,无论是作为电池厂商的宁德时代,还是生产终端产品的比亚迪,甚至是用来生产电池相比暴力分拣乱象,我更关心申通的苦日子何时到头作者龚进辉申通快递(以下简称申通)摊上事了。最近,申通被曝出存在暴力分拣乱象,一位网点工作人员称,建议客户东西怕摔以后发顺丰。你怕有损坏的话你就发顺丰,顺丰不是服务好吗?不差钱就啥