Java 使用JSP迭代ArrayList
我有这个春季申请。如何在jsp文件中遍历所有书籍,因为以我尝试的方式,它不起作用。我不知道如何告诉jsp文件获取列表(allBooks) 控制器Java 使用JSP迭代ArrayList,java,spring,jsp,Java,Spring,Jsp,我有这个春季申请。如何在jsp文件中遍历所有书籍,因为以我尝试的方式,它不起作用。我不知道如何告诉jsp文件获取列表(allBooks) 控制器 @Controller public class ListBooksController { @Autowired ListOfBooks listOfBooks; @RequestMapping("/books") public String books(Model model) { listOfBooks.addBook
@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
<body>
<section>
<div class="jumbotron">
<div class="container">
<h1>Books</h1>
<p>All the available books in our store</p>
</div>
</div>
</section>
<section class="container">
<div class="row">
<c:forEach items="${allBooks}" var="book">
<div class="col-sm-6 col-md-3" style="padding-bottom: 15px">
<div class="thumbnail">
<div class="caption">
<h3>${book.name}</h3>
<p>${book.author}</p>
<p>$${book.price}</p>
</div>
</div>
</div>
</c:forEach>
</div>
</section>
书
我们店里所有可用的书
${book.name}
${book.author}
$${book.price}
它不起作用,因为您传递的是名为“books”的对象,而不是“allBooks” 改为
model.addAttribute("allBooks", listOfBooks.listBooks());
它会起作用的
编辑
所以,先把这些书添加到你的收藏中,可能它是空的
您必须在代码中的某个地方调用listOfBooks.addBooks()
(例如,如果您只是在练习,请创建另一个控制器方法)
无论如何,您不能将这样的书籍存储在服务器上的数组中,因为当您关闭服务器时,所有数据都将消失,您必须将数据持久保存到数据库中
编辑2
根据您的评论,我可以看出您不了解模型是如何工作的,让我为您解释一下:
当你写信的时候
model.addAttribute("books", listOfBooks.listBooks());
您向模型中添加了一组书籍(列表),并将其指定为“书籍”
模型只是一个包含键和值的映射,所以您只需添加一个值为List的键“books”
下一个
你写的是你的观点
<c:forEach items="${allBooks}" var="book">
或者如果您只想添加一次书籍
@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";
}
}
它不起作用,因为您传递的对象名为“books”,而不是“allBooks” 改为
model.addAttribute("allBooks", listOfBooks.listBooks());
它会起作用的
编辑
所以,先把这些书添加到你的收藏中,可能它是空的
您必须在代码中的某个地方调用listOfBooks.addBooks()
(例如,如果您只是在练习,请创建另一个控制器方法)
无论如何,您不能将这样的书籍存储在服务器上的数组中,因为当您关闭服务器时,所有数据都将消失,您必须将数据持久保存到数据库中
编辑2
根据您的评论,我可以看出您不了解模型是如何工作的,让我为您解释一下:
当你写信的时候
model.addAttribute("books", listOfBooks.listBooks());
您向模型中添加了一组书籍(列表),并将其指定为“书籍”
模型只是一个包含键和值的映射,所以您只需添加一个值为List的键“books”
下一个
你写的是你的观点
<c:forEach items="${allBooks}" var="book">
或者如果您只想添加一次书籍
@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";
}
}
请试一试
<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>
${book.bookName}
${book.author}
${book.price}
请试一试
<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>
${book.bookName}
${book.author}
${book.price}
在我将addBooks()添加到界面后,它正在工作,但每次我刷新页面时,它都会自动将相同的两个条目添加到列表中。我想这不是调用此方法的正确位置。@NoSuchUserException当然不是,您应该首先将这些书籍添加到数据库中,然后使用repository@NoSuchUserException:这个答案是基于假设的。如果你真的想要一个解决方案,请说明你所面临的确切问题。@Bhesh Gurung这就是问题所在。。。每次刷新页面时都会调用addBooks()方法,因为它是在控制器中的books()方法中调用的。现在我试着只调用那个方法。@Oskar Dajnowicz现在我只使用数据结构。现在,我将使项目更简单。在我将addBooks()添加到界面后,它正在工作,但每次我刷新页面时,它都会自动将相同的两个条目添加到列表中。我想这不是调用此方法的正确位置。@NoSuchUserException当然不是,您应该首先将这些书籍添加到数据库中,然后使用repository@NoSuchUserException:这个答案是基于假设的。如果你真的想要一个解决方案,请说明你所面临的确切问题。@Bhesh Gurung这就是问题所在。。。每次刷新页面时都会调用addBooks()方法,因为它是在控制器中的books()方法中调用的。现在我试着只调用那个方法。@Oskar Dajnowicz现在我只使用数据结构。现在,我将使项目更简单。这不是解决方案。您使用不同的变量,在这种情况下,它根本不起作用。这不是解决方案。您使用不同的变量,在这种情况下,它根本不起作用。