Я немного застрял, потому что согласно документации это должно работать, но после публикации моей формы все мои поля модели будут нулевыми. Если бы кто-то мог указать, что мне не хватает, было бы здорово.
Вот моя модель:
package hello.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
@Entity
public class Post {
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotNull
private String email;
@NotNull
private String content;
public Post() { }
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Post{" +
"email='" + email + '\'' +
", content='" + content + '\'' +
'}';
}
}
мой фрагмент тимелист с формой:
<div xmlns:th="http://www.thymeleaf.org" th:fragment="wysiwyg" class="panel-body">
<form class="form-horizontal" role="form" method="post" action="#" th:action="@{/post}" th:object="post">
<div class="form-group">
<label for="email">Email</label>
<input id="email" type="email" class="form-control" placeholder="Enter email..." th:field="*{email}"
required/>
<small id="emailHelp" class="form-text text-muted">Enter your email address just in case.</small>
</div>
<div class="form-group">
<label for="content">Post</label>
<textarea id="content" class="form-control" th:field="*{content}"></textarea>
<small id="bodyHelp" class="form-text text-muted">Type your post in here.</small>
</div>
<button id="btnPost" class="btn btn-primary" type="submit">Submit</button>
</form>
<script>
$(document).ready(function() {
$('#teszt2').summernote({
"height": 200
});
});
</script>
</div>
исоответствующий метод контроллера:
@PostMapping("/post")
public String testPost(Post post, Model model) {
System.out.println(post);
return "index";
}
Ожидаемое поведение будет иметь Post {email = $ email, content = $ content}, но я получаю только следующее: Post {email = null, content =null} и я не понимаю почему. Что я делаю неправильно? Что мне не хватает? Все онлайн-учебники утверждают, что это просто работает, но у меня явно не работает.
@ Обновление:
Небольшое обновление. Так что я могу заставить его работать, но только так:
@GetMapping("/post")
public String openEditor(Model model) {
model.addAttribute("post", new Post());
model.addAttribute("content", "wysiwyg");
return "index";
}
Итак, я создаю новый Пустой пост. В моем фрагменте я меняю форму с th: object = "post" на th: object = "$ {post}". Тогда в моем PostMapping:
@PostMapping("/post")
public String testPost(@ModelAttribute("post") Post post, Model model) {
System.out.println(post); // Works well
return "index";
}
Почему это не работает, если я не использую ModelAttribute и не создаю пустое сообщение в первую очередь. Я ожидал, что это сработает ... очевидно, я был не прав