【发布时间】: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(...) 对吗?