使用JSP迭代ArrayList

时间:2015-11-14 17:58:13

标签: java spring jsp

我有这个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;
  }
}

2 个答案:

答案 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>