Я получаю сообщение об ошибке, когда хочу ввести другой фрагмент из одной страницы макета, который содержит фрагменты. Один для заголовка, а другой для формы сообщения. Когда я включаю только первое, у меня возникает проблема, но если я добавляю другое, я получаю две ошибки.
Первый:
Error during execution of processor 'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor' (template: "fragments/header" - line 38, col 26)
Второй -
` ERROR 13400 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet]
: Servlet.service() for servlet [dispatcherServlet] in context with path
[/api] threw exception [Request processing failed; nested exception is
org.thymeleaf.exceptions.TemplateProcessingException: Error during execution
of processor
'org.thymeleaf.spring4.processor.SpringInputGeneralFieldTagProcessor'
(template: "fragments/header" - line 38, col 26)] with root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target
object for bean name 'tweet' available as request attribute`
Первый фрагмент - это панель навигации, а второй - пост-форма. Я использовал thymleaf и весенний ботинок.
header.html:
<!DOCTYPE html >
<html xmlns:th="http://www.thymeleaf.org">
<head>
...
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" th:fragment="header">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#"><strong>Twitter</strong></a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li th:classappend="${module == 'home' ? 'active' : ''}">
<a href="#" th:href="@{/}">My tweets</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/new}">Create a User</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/tweets}">Tweets</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/all}">Display all Users</a>
</li>
<li th:classappend="${module == 'tasks' ? 'active' : ''}">
<a href="#" th:href="@{/overview}">Profile overview</a>
</li>
</ul>
</div>
</div>
</div>
<div th:fragment="post">
<!--/*@thymesVar id="tweet"
type="com.javalanguagezone.interviewtwitter.domain.Tweet"*/-->
<form th:action="@{/tweets/}" th:object="${tweet}" method="post">
<div class="form-group">
<input type="text" th:field="*{content}" placeholder="What's happening?
Tell us!">+
<input type="submit" value="Submit" />
</div>
</form>
</div>
</body>
</html>
HTML-файл, в котором я вызываю фрагменты макета, выглядит следующим образом:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8">
<title>User overview</title>
</head>
<body>
<div th:replace="fragments/header :: header"></div>
<div th:replace="fragments/header :: post"></div>
<div class="container-fluid" style="margin-top: 80px">
<div class="row">
<div class="col-md-12">
<div class="panel panel-primary">
<div class="panel-heading">
<h1 class="panel-title">User profile overview</h1>
</div>
<div class="panel-body">
<div class="table-responsive" th:if="${tweets}!=null">
<table class="table table-hover">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Number of tweets</th>
<th>Number of followers</th>
<th>Number of users following</th>
</tr>
</thead>
<tbody>
<tr>
<td th:text="${user.id}"></td>
<td th:text="${user.getUsername()}"></td>
<td th:text="${tweets}">1</td>
<td th:text="${followers}">Hamdo</td>
<td th:text="${following} "><br/>
</td>
</span>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</body></html>
Контроллер выглядит так:
@PostMapping("/")
@ResponseStatus(CREATED)
public String tweet(@ModelAttribute("tweet") @Valid @RequestBody String
tweet, Principal principal, BindingResult result) {
if(result.hasErrors()){
return "error";
}
tweetService.createTweet(tweet, principal);
return "index";
}
Заранее спасибо за помощь, и я новичок с Thymleaf.