Как я могу использовать две отдельные формы с использованием весны и тимелина? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь передать в каждой форме разные объекты и разные сущности. Это на самом деле работает, я могу видеть новые добавленные значения (строки) в моей базе данных, но все же я продолжаю получать одно и то же исключение, отправляя обе формы отдельно.

java.lang.IllegalStateException: Ни то, ни другое BindingResultни простой целевой объект для имени компонента 'post' доступен в качестве атрибута запроса

и

rg.thymeleaf.exceptions.TemplateProcessingException: ошибка во время выполнения процессора 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor '(template: "/ addPost" - строка 11, столбец 24)

мой контроллер

import com.example.blog.domain.Category;
import com.example.blog.domain.Post;
import com.example.blog.service.CategoryService;
import com.example.blog.service.PostService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


@Controller
@RequestMapping("edit")
public class EditController {

    private final PostService postService;
    private final CategoryService categoryService;

    // At the same time, I can use @Autowired
    public EditController(PostService postService , CategoryService categoryService) {
        this.categoryService = categoryService;
        this.postService = postService;
    }

    //(1)
    @GetMapping("/addPost")
    public String showAddPost(Model model) {
        model.addAttribute("post", new Post());
        model.addAttribute("category" , new Category());
        return "/addPost";
    }

    //Mapping is coming from the view page(addPost.html).
    //The name of the action must be equal
    @PostMapping(value = "/upload")
    public String dataPost(@ModelAttribute Post post, @RequestParam(value = "action", required = true) String action){

        if (action.equals("AddPost")){
            postService.addPost(post);
        }



        return  "/addPost";
    }


    //default : show all posts
    //and shows all categories
    @GetMapping
    public String showAllPosts(Model model){

        model.addAttribute("posts",postService.getAllPosts());
        model.addAttribute("categories" , categoryService.getAllCategories());

        return "index";
    }


    @GetMapping("/deletePost/{id}")
    public String deletePostById(@PathVariable("id") Long id){
        postService.deletePost(id);
        return "redirect:/edit";
    }

    @GetMapping("/editPost/{id}")
    public String editPost(@PathVariable("id") Long id,Model model){
        Post post = postService.findOnePost(id);
        model.addAttribute("post", post);
        return "updatePost";
    }

    @PostMapping("/updatePostAction/{id}")
    public String updateEditedPost(@ModelAttribute Post post, @PathVariable Long id){

        post.setId(id);
        if (post.getId() == null){
            throw new NullPointerException("what the hell: " + post.getId());

        }
        postService.EditPost(post);
        return "redirect:/edit";
    }


    @PostMapping(value = "/addCategory" )
    public String addCategory(@ModelAttribute Category category, @RequestParam(value = "action",required = true) String action) {

        if (action.equals("AddCategory")) {
            categoryService.addCategory(category);
        }

        return "/addPost";
    }

и мой HTML-файл:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form th:action="@{/edit/upload}" th:object="${post}" method="post" >
    Name:<br>
    <input type="text" th:field="*{author}">
    <br>
    Title:<br>
    <input type="text" th:field="*{title}">
    <br>
    Post:<br>
    <textarea name="post" id="" cols="30" rows="10" th:field="*{text}"></textarea>

    <br><br>
    <input type="submit" name="action" value="AddPost">
</form>
<br>


<form th:action="@{/edit/addCategory}" th:object="${category}" method="post" >

    New Category: <br>
    <input type="text" th:field="*{name}">
    <input type="submit" name="action" value="AddCategory" >
</form>

<p th:text="${post.author}"></p>
<p th:text="${post.text}"></p>

</body>
</html>

Как мне разрешить это исключение?

РЕДАКТИРОВАТЬ:

Почтовый класс.

@Entity
@Table(name = "posts")
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Date date;
    private String author;
    private String title;
    private String text;

    public Post(String author, String title, String text) {
        this.author = author;
        this.title = title;
        this.text = text;
    }

    public Post(){

    }
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...