Springboot⽤官⽅建议访问Html页⾯并接传值
特别强调:启动类和所有的controller service mapper等包必须位于同⼀个主包下(同⼀个包中),⽽且启动类在最外⾯,否则这些层都扫不到,不报错,但是⽆法实现我们的功能,要⾮常注意
我们以前通常习惯⽤webapp来放置jsp页⾯,但是到了Springboot中,官⽅建议⽤Static⽂件夹来存放及静态的资源,
⽤templates来存放可供访问的Html资源页⾯,具体的操作如下.
1.加⼊所需要的POM依赖
<!--添加static和templates的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
pom的依赖添加完成后会在resources的⽂件夹下⾯⽣成Static和templates的⽂件夹
2.增加yml⽂件配置
spring
thymeleaf:
prefix: classpath:/templates/
3.在templates中添加html的页⾯:
index.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>第⼀个HTML页⾯</title>
</head>
<body>
<h1>Hello Spring Boot</h1>
<p th:text="${hello}"></p>
<div>
<p th:text="${say}"></p>
</div>
</body>
</html>
4.编写controller层
HelloController:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.HashMap;
@Controller //注意这⾥必须为Controller
public class HelloController {
/**
* 本地访问内容地址:localhost:8080/hello
* @param map
* @return
*/
@RequestMapping("/hello")
public String helloHtml(HashMap<String, Object> map, Model model) {
model.addAttribute("say","欢迎欢迎,热烈欢迎");
map.put("hello", "欢迎进⼊HTML页⾯");
return "index";
}
}
5.完成后启动项⽬,访问,能看到如下页⾯:
image.png
这⾥static主要存放css js等静态资源⽂件 不做过多的讲述,主要来讲讲templates中html的Thymeleaf的属性,这⾥也是困扰我⼀段时间的地⽅,当然Springboot⽤Thymeleaf的原因主要是为了简化代码,⽤习惯了其实都挺不错的.
static下的静态页⾯:
static.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>这是⼀个静态页⾯可以直接访问!</h2>
</body>
</html>
image.png
6.动态templates下存放的页⾯常⽤的th标签
常⽤th标签都有那些?
关键字 功能介绍 案例
th:id 替换id <input th:id="'xxx' + ${collect.id}"/>
th:text ⽂本替换 <p th:text="${collect.description}">description</p>
th:utext ⽀持html的⽂本替换 <p th:utext="${htmlcontent}">conten</p>
th:object 替换对象 <div th:object="${session.user}">
th:value 属性赋值 <input th:value="${user.name}" />
th:with 变量赋值运算 <div th:with="isEven=${unt}%2==0"></div>
th:style 设置样式 th:
th:onclick 点击事件 th:onclick="'getCollect()'"
th:each 属性赋值 tr th:each="user,userStat:${users}">
html中提交表单用什么属性th:if 判断条件 <a th:if="${userId == collect.userId}" >
th:unless 和th:if判断相反 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
th:href 链接地址 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a> />
th:switch 多路选择配合th:case 使⽤ <div th:switch="${le}">
th:case th:switch的⼀个分⽀ <p th:case="'admin'">User is an administrator</p>
th:fragment 布局标签,定义⼀个代码⽚段,⽅便其它地⽅引⽤ <div th:fragment="alert">
th:include 布局标签,替换内容到引⼊的⽂件 <head th:include="layout :: htmlhead" th:with="title='xx'"></head> />
th:replace 布局标签,替换整个标签到引⼊的⽂件 <div th:replace="fragments/header :: title"></div>
th:selected selected选择框选中 th:selected="(${xxx.id} == ${configObj.dd})"
th:src 图⽚类地址引⼊ <img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />
th:inline 定义js脚本可以使⽤变量 <script type="text/javascript" th:inline="javascript">
th:action 表单提交的地址 <form action="subscribe.html" th:action="@{/subscribe}">
th:remove 删除某个属性 <tr th:remove="all">
1.all:删除包含标签和所有的孩⼦。
2.body:不包含标记删除,但删除其所有的孩⼦。
3.tag:包含标记的删除,但不删除它的孩⼦。
4.all-but-first:删除所有包含标签的孩⼦,除了第⼀个。
5.none:什么也不做。这个值是有⽤的动态评估。
th:attr 设置标签属性,多个属性可以⽤逗号分隔⽐如 th:attr="src=@{/image/aa.jpg},title=#{logo}",此标签不太优雅,⼀般⽤的⽐较少。
6.1 th:text
可对表达式或变量求值,并将结果显⽰在其被包含的 html 标签体内替换原有html⽂本。
⽂本链接: ⽤ "+" 符号,若是变量表达式也可以⽤“|”符号
eg.
<p th:text="#{home.welcome}">Welcome to our grocery store!</p>
equals.(局限:只能在html5中使⽤)
<p data-th-text="#{home.welcome}">Welcome to our grocery store!</p>
The th:text attribute, which evaluates its value expression and sets the result as the body of the host tag, effectively replacing the “Welcome to our grocery store!” text we see in the code.(th:text属性,他声明设置表达式的值,并使表达式返回的值来填充标签内容,替换或设置标签内部的内容,当前例⼦中即替换“欢迎光临本店”这些字。)
The #{home.welcome} expression, specified in the Standard Expression Syntax, instructing that the text to be used by the th:text attribute should be the message with the home.welcome key corresponding to whichever locale we are processing the template with.(#{home.welcome}表达式,⼀个标准的表达式语法,指出在模板中,th:text属性所对应Message的key,即使⽤home.welcome对应的value替换现有内容。)
6.2 th:utext(⾮转义⽂本:unescaped text)
<(想要输出转义字符效果)
home.welcome=Welcome to our <b>fantastic</b> grocery store!
执⾏此模板,默认使⽤<p th:text="#{home.welcome}"></p>来解析,结果为:
<p>Welcome to our <b>fantastic</b> grocery store!</p>
解决⽅案:(This is the default behaviour of the th:text attribute. If we want Thymeleaf to respect our HTML tags and not escape them, we will have to use a different attribute: th:utext (for “unescaped text”):)
使⽤<p th:utext="#{home.welcome}"></p>即可。
<p th:utext="#{home.welcome}">Welcome to our grocery store!</p>
等效于html:
<p>Welcome to our <b>fantastic</b> grocery store!</p>
6.3 th:href
@{xxx} :链接url的表达式
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论