Как предварительно установить несколько значений в множественном выборе в jsp по данным из БД? (MVC, Spring) - PullRequest
0 голосов
/ 28 декабря 2018
  1. быстрый просмотр Быстрый обзор моего проекта У меня есть очевидные Entities Book и Author, подобные этим (конечно, у меня есть конструкторы, геттеры и сеттеры):

    @Entity
    @Table(name= "book")
    public class Book {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
    
        private String bookId;
        private String title;
        private Date publishDate;
        private int countOfCopies;
    
        @ManyToMany(fetch = FetchType.LAZY,
          cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
          }, mappedBy="authorsBooks")
        private Set<Author> booksAuthors;
    
    }
    

    Автор

    @Entity
    @Table(name = "author")
    public class Author {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;
        private String name;
        private Date birthday;
        private String address;
        private String authorInfo;
    
        @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            })
        @JoinTable(name = "author_and_authors_books", 
            joinColumns = { @JoinColumn(name = "author_id") },
            inverseJoinColumns = { @JoinColumn(name = "book_id") })
        private Set<Book> authorsBooks;
    

Как вы можете видеть, Книга имеет Набор авторов (потому что здесь может быть несколько авторов), а автор имеет набор книг (потому что один автор мог писатьнесколько книг).

У меня есть контроллер для редактирования автора следующим образом:

@RequestMapping(value = "/author/{id}/edit", method = RequestMethod.GET)
    public String editAuthorById(@PathVariable(value="id") int id, Model model) {
        model.addAttribute("author", authorService.getAuthorById(id));
        model.addAttribute("books", bookService.getAllBooks());
        return "editauthor";
    }

У меня есть файл jsp, который выглядит так:

<form method="post" action="/author/${author.id}/edit" class="editForm">
        <div>
            Name<input type="text" name="name" value="${author.name}">
        </div>
        <div>Birtday<input type="text" name="birthday" value='<fmt:formatDate pattern="dd/MM/yyyy" value="${author.birthday}"/>'></div>
        <div>Addess<input type="text" name="address" value="${author.address}"></div>
        <div>Info<input type="text" name="authorInfo" value="${author.authorInfo}"></div>

        <div>
            <select id="authorsBooks" multiple name="authorsBooks" size="5">
                <c:forEach items="${books}" var="book">
                <c:if test="book"></c:if>
                    <option value="${book.id}"><c:out value="${book.title}" /></option>
                </c:forEach>
            </select>
        </div> 
        <input type="submit" value="Save Changes">
    </form>

Вот как мойJSP в браузере выглядит так: enter image description here

И, наконец, Вопрос : В моем контроллере в модели я поместил одного автора и все книги из БД.В моем jsp, как вы видите, я заполняю ввод по атрибутам автора и показывает ВСЕ книги из БД.Но я должен установить несколько книг в мультиселекте, если они есть у автора (как вы помните, у автора есть Набор книг).Как я могу сделать это, потому что я провел почти 10 часов с этой проблемой ???Я могу использовать JQuery, но большинство проблем для меня, как установить параметр тега, как выбранный?но прежде чем я покажу книгу из списка (из всех книг), я должен проверить, принадлежит ли эта книга этому автору, и, если это так, сделать ее выбранной (просто для лучшего понимания, если у автора в Ain Rand есть Set, где находятся Atlas 1 и Atlas2, я должен увидеть страницу, как это, когда я открою ее: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...