前言
本章讲解Thymeleaf语法的迭代遍历和URL表达式
方法
修改上一章节的controller
package cn.edu.ccut.controller;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.edu.ccut.bo.Users;
@Controller
public class HelloController {
@RequestMapping("/showMsg")
public String getMsg(HttpServletRequest request, Model model){
Map<String, Object> map = new HashMap<>();
List<Users> list = new ArrayList<>();
Users user1 = new Users(1, "张三", 20);
Users user2 = new Users(2, "李四", 22);
Users user3 = new Users(3, "王五", 24);
list.add(user1);
list.add(user2);
list.add(user3);
map.put("u1", user1);
map.put("u2", user2);
map.put("u3", user3);
model.addAttribute("list", list);
model.addAttribute("map", map);
return "index";
}
}
1.迭代遍历
1)迭代list
<!DOCTYPE html>
<html>
<head>
<title>Thymeleaf</title>
</head>
<body>
<table border="0">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<tr th:each="user : ${list}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.age}"></td>
</tr>
</table>
</body>
</html>
我们可以发现,它和我们熟悉的Java foreach很相似,我们上手的难度不是很高。
2)遍历map
<!DOCTYPE html>
<html>
<head>
<title>Thymeleaf</title>
</head>
<body>
<table border="0">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<!-- <tr th:each="user : ${list}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.age}"></td>
</tr> -->
<tr th:each="maps : ${map}">
<td th:each="entry : ${maps}" th:text="${entry.value.id}"></td>
<td th:each="entry : ${maps}" th:text="${entry.value.name}"></td>
<td th:each="entry : ${maps}" th:text="${entry.value.age}"></td>
</tr>
</table>
</body>
</html>
我们注意到,这个map需要遍历两次才能拿到真正的键值对。
2.URL表达式
出于安全的考虑,模板类文件不可以通过浏览器直接键入URL地址访问,为了让本次测试更加方便,我们将编写一个controller方法来进行页面跳转!
package cn.edu.ccut.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page,String name,Integer age){
System.out.println("name="+name+",age="+age);
return page;
}
}
该方法可以直接跳转到我们所需要的路径。
创建index.html:
<!DOCTYPE html>
<html>
<head>
<title>Thymeleaf</title>
</head>
<body>
<a href="/index2">普通跳转</a>
<a th:href="@{/index2}">thymeleaf跳转</a>
</body>
</html>
创建index2.html:
<!DOCTYPE html>
<html>
<head>
<title>Index2</title>
</head>
<body>
Hello Index2<br/>
</body>
</html>
注意:使用thymeleaf语法的href需要加上@{}
经验证,都可以跳转到指定的index2页面中。
传递参数:
修改我们的index.html
<!DOCTYPE html>
<html>
<head>
<title>Thymeleaf</title>
</head>
<body>
<a href="/index2?name=jwang&age=23">普通跳转</a>
<a th:href="@{/index2(name=jwang,age=23)}">thymeleaf跳转</a>
</body>
</html>
由此可见,它们虽然写法不同,但是起到了同样的效果!!