Thymeleaf 문법 데이터 지연 로드 사용 실례를 간단히 이해하기

템플릿을 처리할 때 템플릿 논리에 따라 데이터를 불러올지 여부를 결정하여 성능을 향상시킬 수 있습니다.
Spring Boot 컨트롤러에서 데이터를 설정할 때 LazyContextVariable을 사용하면 이 기능을 수행할 수 있습니다.
개발 환경: IntelliJ IDEA 2019.2.2
Spring Boot 버전: 2.1.8
demo라는 Spring Boot 항목을 새로 만듭니다.
1、pom.xml
Thymeleaf 의존 가입

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
2、src/main/java/com/example/demo/User.java

package com.example.demo;

public class User {
 Integer id;
 String name;

 public User(Integer id, String name) {
  this.id = id;
  this.name = name;
 }
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
}
3、src/main/java/com/example/demo/TestController.java

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.thymeleaf.context.LazyContextVariable;

import java.util.ArrayList;
import java.util.List;

@Controller
public class TestController {
 @RequestMapping("/{show}")
 public String test(Model model, @PathVariable("show") boolean show){
  model.addAttribute("users", new LazyContextVariable() {
   @Override
   protected Object loadValue() {
    return queryUsers();
   }
  });
  model.addAttribute("show", show);
  return "test";
 }

 private List<User> queryUsers(){
  System.out.println(" , ");
  List<User> users = new ArrayList<User>();
  users.add(new User(1," "));
  users.add(new User(2," "));
  users.add(new User(3," "));
  return users;
 }
}
4、src/main/resources/templates/test.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style type="text/css">
  table { border-collapse:collapse;}
  td { border: 1px solid #C1DAD7;}
 </style>
</head>
<body>
 <table th:if="${show == true}">
  <tr th:each="user : ${users}">
   <td th:text="${user.id}"></td>
   <td th:text="${user.name}"></td>
  </tr>
 </table>
</body>
</html>
브라우저 액세스:
http://localhost:8080/false, 페이지에 데이터가 표시되지 않았습니다. 컨트롤러에 정보가 출력되지 않았습니다.
http://localhost:8080/true, 페이지에 데이터를 표시하고 컨트롤러는'아날로그 조회 데이터, 실제 응용 프로그램에서 데이터베이스를 직접 조회할 수 있습니다'를 출력합니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기