Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSP迭代ArrayList_Java_Spring_Jsp - Fatal编程技术网

Java 使用JSP迭代ArrayList

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

我有这个春季申请。如何在jsp文件中遍历所有书籍,因为以我尝试的方式,它不起作用。我不知道如何告诉jsp文件获取列表(allBooks)

控制器

@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现在我只使用数据结构。现在,我将使项目更简单。这不是解决方案。您使用不同的变量,在这种情况下,它根本不起作用。这不是解决方案。您使用不同的变量,在这种情况下,它根本不起作用。