Как я могу настроить входы динамически для переменной типа List? - PullRequest
0 голосов
/ 11 января 2020

Я работаю над проектом для начинающих в Spring Boot в java, с Hibernate, JPA и Thymeleaf. У меня есть Post сущность с 3 важными переменными: String title, String content и List<Tag> tags. Во-вторых, у меня есть форма, которая используется для создания новых Post сущностей. Как видите, у меня нет проблем с настройкой входных данных для String title и String content, но я не знаю, как я могу позволить пользователю ввести tags сообщения.

Post. java:

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

    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Id
    @Column(name = "postId")
    private Integer postId;

    @Column(name = "title")
    private String title;

    @Column(name = "content")
    private String content;

    @ManyToMany
    @JoinTable(name="postTag", joinColumns = { @JoinColumn(name = "postId") }, inverseJoinColumns = { @JoinColumn(name = "tagId") })
    private List<Tag> tags = new ArrayList<Tag>();

    public Post() {
    }

    public Integer getPostId() {
        return postId;
    }

    public void setPostId(Integer id) {
        this.postId = id;
    }   

    public String getTitle() {
        return title;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public List<Tag> getTags() {
        return tags;
    }

    public void setTags(List<Tag> tags) {
        this.tags = tags;
    }

}

Важная часть PostController. java

@GetMapping("/add")
    public String addPostForm(Model model, Post post) {
        model.addAttribute("post", post);
        model.addAttribute("tags", post.getTags());
        return "add-post";
    }

    @PostMapping("/add")
    public String addPostProcess(@ModelAttribute("post") Post post, Model model) {
        postService.savePost(post);

        //return the page, what will display the posts
    }

Важная часть add-post. html

<form action="#" th:action="@{/posts/add}" th:object="${post}" method="post">
    <input type="text" th:field="*{title}" id="title" />
    <textarea th:field="*{content}" id="content"></textarea>

    <div th:each="tag : ${tags}">
        <input type="text" th:field="*{tag.name}" id="tag">
    </div>

    <div th:each="item, tag : ${tags}">
        <input th:field="${tags[__${tag.index}__].name}" type="text"/>
    </div>

    <input type="submit" value="Add post" />
</form>

Как я могу это сделать?

1 Ответ

0 голосов
/ 12 января 2020

Вы должны использовать звездочку вместо доллара для тега th:field:

<input th:field="*{tags[__${tag.index}__].name}" type="text"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...