我有这个Spring应用程序。如何在jsp文件中迭代allBooks因为我尝试它的方式不起作用。我不知道如何告诉jsp文件获取列表(allBooks)。
控制器
System =>Permissions =>Blocks
ListOfBooksImpl
@Controller
public class ListBooksController {
@Autowired
ListOfBooks listOfBooks;
@RequestMapping("/books")
public String books(Model model) {
listOfBooks.addBooks();
model.addAttribute("books", listOfBooks.listBooks());
return "books";
}
}
书
@Repository
public class ListOfBooksImpl implements ListOfBooks {
protected List<Book> allBooks = new ArrayList<>();
@Override
public void addBooks() {
Book tutun = new Book("Тютюн", "Димитър Талев", 50);
Book lotr = new Book("Lord Of The Rings", "Tolkin", 35);
allBooks.add(tutun);
allBooks.add(lotr);
}
@Override
public List<Book> listBooks() {
return allBooks;
}
}
books.jsp
public class Book {
private String bookName;
private String author;
private int price;
public Book(String bookName, String author, int price) {
this.bookName = bookName;
this.author = author;
this.price = price;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
答案 0 :(得分:3)
它没有用,因为你传递了名为&#34; books&#34;不是&#34; allBooks&#34;
model.addAttribute("books", listOfBooks.listBooks());
更改为
model.addAttribute("allBooks", listOfBooks.listBooks());
它会起作用
修改强>
首先将书籍添加到您的收藏中,可能是空的
你必须在代码中的某个地方调用listOfBooks.addBooks()
(例如,如果你正在练习它,请创建另一个控制器方法)
无论如何你不能将这样的书存放在服务器上的数组中,因为当你关闭服务器时,所有数据都将消失,你必须将数据保存到数据库
编辑2
根据您的评论,我可以看到您不明白模型是如何工作的,让我为您解释一下:
当你写了
model.addAttribute("books", listOfBooks.listBooks());
您在模型中添加了一系列图书(列表),并将其分配为&#34;图书&#34;
模型只是一个包含键和值的地图,因此您只需添加一个键&#34; books&#34;值为List
nextly
你在视图中写道 <c:forEach items="${allBooks}" var="book">
allBooks显然不存在于模型映射中,当你手动将键分配给List时,对象ListOfBooksImpl中的变量名称并不重要,你有一个书籍密钥
编辑3
因此,如果您想添加书籍,只需创建另一个控制器方法并首先调用它
@Controller
public class ListBooksController {
@Autowired
ListOfBooks listOfBooks;
@RequestMapping("/addBooks")
public String addBooks() {
listOfBooks.addBooks();
return "books";
}
@RequestMapping("/books")
public String books(Model model) {
model.addAttribute("books", listOfBooks.listBooks());
return "books";
}
}
或者如果您只想添加一次图书
@Controller
public class ListBooksController {
@Autowired
ListOfBooks listOfBooks;
@RequestMapping("/books")
public String books(Model model) {
if(listOfBooks.listBooks().isEmpty())
listOfBooks.addBooks();
model.addAttribute("books", listOfBooks.listBooks());
return "books";
}
}
答案 1 :(得分:0)
请试试。
<c:forEach items="${books}" var="book">
<div class="col-sm-6 col-md-3" style="padding-bottom: 15px">
<div class="thumbnail">
<div class="caption">
<h3>${book.bookName}</h3>
<p>${book.author}</p>
<p>${book.price}</p>
</div>
</div>
</div>
</c:forEach>