1. 变量表达式 ${...} 例:<p th:text=”${变量}”>原生内容</p>
①Model中的属性
8种Java基本类型之一 =》直接引用
对象类型 =》name.attribute
②Spring管理的对象 (#locale,#ctx,#arrays,#dates等)
${#对象名.成员}
由于经常需要获取表单传给Servlet的参数,为此专门定义一个快捷名称param,不用加前缀#:
${param.表单组件名}
2. 被选对象表达式 *{...}
① th:object 把变量表达式定义成被选对象
② 在这个HTML的后代元素中,可以在被选对象表达式中引用它
说明:定义类A、B、C,创建A的对象a存入Model中,C中有变量s、i
<div th:object="${a.b.getC()}">
<p th:text="*{s}"></p>
<p th:text="*{i}"></p>
</div>
3. 消息表达式 #{来自国际化配置文件中的属性}
默认国际化配置文件名:messages_语言_地区.properties
放在resouces目录下(与application.propertier同级)
messages.properties
answer.tip=Message from server:
login.password=Password
login.submit=OK
login.user=Use
在模板中引用配置文件:#{login.user}
改变国际化配置文件的位置:在resource目录下新建目录,一般为i18n
在application.properties中指明:spring.messages.basename=i18n.mymsg
IDEA中输入配置文件
① 从Idea的菜单“File” =》 “Setting” =》 “Editor”,设置Default encoding为utf - 8
② 在工程资源管理器中的resources上,右键菜单 =》 new =》 Resource Bundle
③ 输入基础名称;点加号;输入定制的局部化选项如zh_CN
④ 在配置文件中输入属性。在编辑区的下方点“Resource Bundle”切换视图;
新版IDEA需要自行在 settings 菜单中打开 Plugins 下载插件Resources Bundle Editor
输入自定义的属性名、输入属性值
在网页中设置语言选项
① 在网页中设置语言超链接(打开新网页也能使用该语言选项)
eg: <a href="?locale=zh_CN">中文</a>
'?'后面是GET方式提交的参数,参数名为locale,值为局部化信息,意思是按照语言选项来显示当前页
② 替换 Spring 默认的局部化解析器,在WebMvcConfigurer的子类中进行
优点:与控制器充分解耦
@Configuration
//实现 WebMvcConfigurer
public class MyConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver(){
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
//返回 SessionLocaleResolve 对象,它用 Session 存储局部化信息,以便在多网页间共享
@Bean
public LocaleChangeInterceptor localeChangeInterceptor(){
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
return lci;
}
//创建一个拦截器,默认拦截所有具有参数名称locale的url,然后把它的值保存到Session
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(localeChangeInterceptor());
}
//注册Locale拦截器
}
@Configuration
表示该类是一个配置类,交给Spring管理,而不用自己创建对象、调用方法令其起作用。
@Bean
表示方法返回的对象交给Spring管理,Spring知道何时使用它们,开发者只要设计好对象的功能。
4. 链接表达式
超链接a和link的href属性 =》th:href
img和script的src属性 =》th:src
表单的action属性 =》th:action
它们用链接表达式赋值,例如:th:href=@{url路径(参数名1=${...},...,参数名n=${...})}
① 用于根据Model自动生成url的参数
② url重写 —— Thymleaf会判断浏览器端是否禁用了Cookie,若禁用了,就把 Sesssion ID 以url参数的形式发送给服务器,这种技术称为url重写
Session ID是存储在客户端的Cookie中的,如过设置浏览器禁止Cookie,那么浏览便无法每次把Session ID放到HTTP请求头中了,服务端也就每办法区分哪些请求来自同一个会话
5. 字面量 —— 作为属性值或其一部分
文本字面量:单引号括起来的字符序列
若只含字母、数字、方括号、点、连字符-、下划线_,单引号可以省略。
<p>The Element span is a <span th:text="'Text Literal'"></span>.</p>
= <p>The Element span is a <span>Text Literal</span>.</p>
数字字面量:可以是负数、科学计数法
负数、减号容易被误当作文本字面量
<p>1.6+0.4=<span th:text="1.6+0.4">Sum</span></p>
= <p>1.6+0.4=<span>2.0</span></p
布尔型字面量:true,false
null字面量:null