«Это 12-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".
Другими словами, так как фронтенд и бэкенд разделены, то сцен, где фронтенд и бэкенд соединяются вместе, очень мало.Недавно я писал простенький бэкенд, и вдруг наступил на яму. Я использовал шаблон theleaf для рендеринга и обнаружил, чтоth:each
Чтобы просмотреть сгенерированные данные формы, продолжайте генерировать исключения, запрашиваяProperty or field 'xxx' cannot be found on null
Посмотрим, в чем проблема
I. Строительство проекта
1. Зависимости проекта
Этот проект используетSpringBoot 2.2.1.RELEASE
+ maven 3.5.3
+ IDEA
развивать
Откройте веб-сервис для тестирования
<dependencies>
<!-- 邮件发送的核心依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
Файл конфигурации application.yml
server:
port: 8080
spring:
thymeleaf:
mode: HTML
encoding: UTF-8
servlet:
content-type: text/html
cache: false
II. Повторение проблемы и решение
1. Воспроизведение сцены
Самая простая демонстрация для демонстрации проблемы
@Controller
public class IndexController {
public Map<String, Object> newMap(String key, Object val, Object... kv) {
Map<String, Object> map = new HashMap<>();
map.put(key, val);
for (int i = 0; i < kv.length; i += 2) {
map.put(String.valueOf(kv[i]), kv[i + 1]);
}
return map;
}
@GetMapping(path = "list")
public String list(Model model) {
List<Map> list = new ArrayList<>();
list.add(newMap("user", "yh", "name", "一灰"));
list.add(newMap("user", "2h", "name", "2灰"));
list.add(newMap("user", "3h", "name", "3灰"));
model.addAttribute("list", list);
return "list";
}
}
Соответствующий html-файл выглядит следующим образом (обратите внимание, что он находится в каталоге ресурсовtemplates
Вниз)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body>
<div>
<div th:each="item: ${list}">
<span th:text="${item.user}"></span>
<span th:text="${item.name}"></span>
</div>
<hr/>
<p th:each="item: ${list}">
<p th:text="${item.user}"></p>
<p th:text="${item.name}"></p>
</p>
</div>
</body>
</html>
Обратите внимание на приведенный выше шаблон, на каждый обход приходится два, проблема во втором
2. Причины
Пользователю не предлагается выше, значит, это проблема с грамматикой? При изменении html на следующий
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
</head>
<body>
<div>
<div th:each="item: ${list}">
<span th:text="${item.user}"></span>
<span th:text="${item.name}"></span>
</div>
</div>
</body>
</html>
Тот же способ написания, вышеизложенное прекрасно.После многих попыток было установлено, что причина проблемы была на самом деле<p>
этот тег
Проще говоря, это<p>
теги нельзя использоватьth:each
, и найден после тестирования других тегов<img>
,<input>
Ярлыки тоже не работают
Итак, вопрос в том, почему эти теги не могут использовать каждый?
По этой причине вам может понадобиться взглянуть на логику реализации, о ней может узнать любой, кто ее знает.
III. Исходный код и связанные с ним знания, которые нельзя пропустить
0. Проект
- проект:GitHub.com/JuneB/tickets…
- Исходный код:GitHub.com/JuneB/tickets…
1. Публичный аккаунт WeChat: блог Yihuihui
Это не так хорошо, как письмо. Вышеупомянутое содержание чисто из семьи. Из-за ограниченных личных способностей неизбежно будут упущения и ошибки. Если вы обнаружите ошибки или у вас есть лучшие предложения, вы можете критиковать и поправьте их.
Ниже представлен серый личный блог, в котором записываются все посты в блоге по учебе и работе, приглашаю всех посетить
- One Grey BlogПерсональный блогblog.hhui.top
- Серый блог - специальный весенний блогspring.hhui.top