【问题标题】:Trying to get an arraylist in my JSP result always in null variable [duplicate]试图在我的 JSP 中获取一个数组列表总是在空变量中[重复]
【发布时间】:2018-04-18 17:44:16
【问题描述】:

我正在做一个项目,我需要做一个研究领域,将我重定向到一个 jsp 页面上以显示结果。我在没有任何数据库的情况下工作,所以我将用户在输入中写入的字符串与字符串数组进行比较。

我有一个这样的welcome.jsp:

<form name="form" method="post" action="http://localhost:8080/Miniproject/ResServlet">
   <label for="book">Search for a book</label><br>
  <input type="text" name="book" id="book">
  <br>

  <input type="submit" value="Chercher un livre" id="button_submit_book">
</form> 

我的 servlet ResServlet.java 是:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String book = request.getParameter("book");

        ArrayList<String> resultat = Reservation.search(book);
         request.setAttribute("resultat",resultat);
         RequestDispatcher dispatcher=getServletContext().getRequestDispatcher("/view/books.jsp");
            dispatcher.include(request, response);



        doGet(request, response);
    }

我的 Reservation.java 模型是:

import java.util.ArrayList;

public class Reservation {
     public String book;

     public String getBook() {

            return this.book;

        }

     public void setBook( String book ) {

            this.book = book;

        }

     public static ArrayList<String> search( String book ) {
         String book1 = book.toLowerCase();
         String[] booksarray = {"De la guerre, Clausewitz","Les Misérables, Victor Hugo","Le Rouge et le noir, Stendhal","livre1","livre2","livre3","livre4"};
         ArrayList<String> result = new ArrayList<String>();
         for (String bookname: booksarray) {   
             String book2 = bookname.toLowerCase();
             if(book2.equals(book1)) {
                 result.add(bookname);
             }
            }

        return result;

         }


        }

我尝试使用 equals,但也尝试使用 contains,但没有任何效果

最后的 books.jsp 文件是:

<h2>RESULT OF THE RESEARCH</h2>

<% String[] resultat = request.getParameterValues("resultat"); %><br>
<% out.println(resultat); %><br>

但在我的 books.jsp 中,它总是显示 'null' 我不知道为什么...

如果你们中有人知道它为什么不起作用,那将对我有很大帮助,感谢您的关注和时间:D

【问题讨论】:

  • resultat 是 List 类型的 属性。为什么你期望在 request.getParameterValues("resultat") 中找到它的元素?参数和属性不是一回事。此外,您应该转发而不是包含,并且没有充分的理由从 doPost() 调用 doGet(),并且应该使用 GET 而不是 POST 来完成搜索。
  • 好的,感谢您的快速回答。参数是用户输入的内容,属性是服务器设置的内容,因此我更改了代码以在会话中创建和设置属性但是当我尝试在我的 JSP 中调用 session.getAttribute("resultat") 时类型不匹配,而我的变量是 ArrayList resultat 所以它是相同的类型:/
  • 好的,我试过了:ArrayList resultat= (ArrayList)session.getAttribute("resultat");它奏效了,谢谢
  • 为什么要把属性放在会话中?它应该在请求中设置,而不是在会话中。
  • 我应该做一个 request.setAttribute(..) 吗?然后是 JSP 中的 getAttribute(...) 对吗?

标签: jsp servlets arraylist


【解决方案1】:

您已经在请求对象中设置了结果,我没有对此进行测试,但我通常会将会话中的值设置为

session.setAttribute("resultat", resultat);

在您的 books.jsp 中,您可以将其检索为

<% ArrayList<String> resultat = (ArrayList<String>)(session.getAttribute("resultat")); %>

这同样适用于请求对象,值得对此进行测试,但您需要使用 getAttribute(),而不是 getParameterValues(),因为这不是参数。

注意你设置的属性是ArrayList类型,所以调用getAttribute()时需要使用相同的类型(ArrayList和String[]不一样)

【讨论】:

  • 好的,我试过了,但我有一个错误,比如“无法从对象转换为 arraylist,我不明白这次我的 'resultat' 属性而不是参数是一个 arraylist 所以它应该不会在这里造成类型问题吧?
  • resultat 值确实具有 ArrayList 类型,但 Java 不知道,您必须通过强制转换来告诉它。我已经修改了代码以包含演员表。
  • 完美,我就是这么做的 :) 谢谢
猜你喜欢
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多