【问题标题】:Cant print ArrayList in JSP from Servlet无法从 Servlet 打印 JSP 中的 ArrayList
【发布时间】:2018-04-24 00:00:29
【问题描述】:

所以我在 java servlet 中制作了这个简单的列表,我想在 JSP 页面中显示它。小服务程序代码:

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{


            ArrayList<String> myList = new ArrayList<String>();

            myList.add("cat");
            myList.add("dog");
            myList.add("frog");
            request.setAttribute("list", myList);
            String nextJSP = "/index.jsp";
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
            dispatcher.forward(request,response);
}

}

但是它不会在以下 JSP 文件中打印:

<%@page import="java.io.*" %>
<%@page import="java.net.*" %>
<%@page import="java.util.*" %>
<%@page import="java.util.List" %> 
<%@page import="java.util.ArrayList" %>
<%@page language="java" import="myPackage.*" %>

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

<% List<String> myList = (ArrayList<String>) 
 request.getAttribute("list"); %>
<% out.println(myList); %>


 </body>

 </html>

任何帮助将不胜感激!

【问题讨论】:

  • 什么不起作用?您收到错误消息了吗?
  • 我收到 HTTP 错误 500 消息,我不知道为什么这不起作用
  • 好的,我已经回答了这个问题:让我知道它是否适合你

标签: java jsp servlets


【解决方案1】:

HTTP 500 错误来自这一行:

<% List<String> myList = (ArrayList<String>) 
 request.getAttribute("list"); %>

它有多余的(),删除它并如下所示,然后HTTP 500会消失,而不是你会得到一个警告Type safety:Unchecked cast from Object to ArrayList&lt;String&gt;,但这没关系

关于如何打印ArrayList,如果你的jsp页面中有import JSTL标签,你可以这样做,之前的答案已经提到了:

<c:forEach var="li" items="${list}">
 <c:out value="${li}"/> 
</c:forEach>

如果不想使用JSTL,可以使用java代码打印:

 <% for(int i=0;i<myList.size();i++){
   out.println(myList.get(i));
 } %>

【讨论】:

  • 谢谢,试过了,还是不行。我相信这与我的 servlet 有关,如果它映射到我的 web xml 文件中,我的 jsp 将无法工作
  • @kieron 在我发布我的答案之前我已经在我身边测试过它工作正常,所以你的项目配置一定有问题
【解决方案2】:

好的,您收到 HTTP 500 错误消息,我怀疑它来自您的代码的以下部分:

<% out.println(myList); %>

请记住,此处使用的 out 不是 System.out,其行为方式也不相同。而是尝试(将上面提到的行替换为以下内容):

<%  Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {    
       out.println(<iterator.next());
    }
%>

【讨论】:

    【解决方案3】:

    你可以使用核心标签 foreach

    <c:forEach var="list" items="${YourList}">
     <c:out value="${list}"/> 
    </c:forEach>
    

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多