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