【问题标题】:Setting ArrayList as an attribute in servlet and accessing in jsp将ArrayList设置为servlet中的属性并在jsp中访问
【发布时间】:2018-03-12 06:51:36
【问题描述】:

我正在尝试将字符串的数组列表设置为 servlet 中的会话属性,并尝试在 jsp 中访问此属性数组列表。 但是jsp中只有一个值(最后一个值)访问。 我想访问所有属性列表。

我在这里和那里搜索了太多,但我没有找到我的问题。

形成jsp:

<form action="/CompleteServlet" method="get">
<%String completeTasks=((ArrayList<String>)session.getAttribute("todoList")).get(i);%>
 <input type="hidden" name="completeTasks" value="<%=completeTasks%>" />
 <input type="submit" value="Completed">
</form>

来自 CompleteServlet:

 String v=req.getParameter("completeTasks");
        HttpSession session=req.getSession();

        ArrayList<String> arrOfCompleteTask = new ArrayList<>();
        arrOfCompleteTask.add(v);
        session.setAttribute("completeTasks", arrOfCompleteTask);

        req.getRequestDispatcher("/complete.jsp").forward(req,resp);

形成 complete.jsp

<%
int size=((List<String>)session.getAttribute("tryCom")).size();
    for(int i=0;i<size;i++)
        {%>
<%=((List<String>)session.getAttribute("tryCom")).get(i)%>``
       <%}%>

【问题讨论】:

  • )session.getAttribute("completeTasks")).size(); for(int i=0;i)session.getAttribute("completeTasks")).get(i)%> 还是一样的错误

标签: java jsp servlets jakarta-ee


【解决方案1】:

你不能这样,“i”在哪里声明呢??:

<form action="/CompleteServlet" method="get">
<%String completeTasks=((ArrayList<String>)session.getAttribute("todoList")).get(i);%>
 <input type="hidden" name="completeTasks" value="<%=completeTasks%>" />
 <input type="submit" value="Completed">
</form>

Scriptlet(这些东西:)自 2010 年以来一直不鼓励使用。有一个完整的 list 原因说明您应该尽可能避免使用它们。

你应该这样做:

<form action="/CompleteServlet" method="get">
 <input type="hidden" name="completeTasks" value="${todoList}" />
 <input type="submit" value="Completed">
</form>

然后您可以在 CompleteServlet 中获取 completeTasks 的最后一个值,或者在表单视图中发送它之前设置最后一个值。后者是更简单的选择。前者涉及将 completeTasks 作为字符串,然后通过拆分每个值使其成为 ArrayList,通常使用逗号。像这样:

String v=req.getParameter("completeTasks");
ArrayList<String> myList = new ArrayList<String>(Arrays.asList(v.split(",")));

【讨论】:

    【解决方案2】:

    通过一些编辑,比如声明你在 form jsp 的 Scriptlet 中使用的 i 确实可以工作,但由于我听说非常不建议这样做,我将提供另一种解决方案,即 JSTL。

    jsfile.jsp

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    
    <html>
    <head>
    <title>Any title</title>
    </head>
    <body>
        <table>
            <tr>
                <c:forEach begin="0" end="${fn:length(completeTasks) - 1}" var="index">
                    <td><c:out value="${completeTasks[index]}" /></td>
                </c:forEach>
            </tr>
        </table>
    </body>
    </html>
    

    form.jsp

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Form</title>
    </head>
    <body>
        <form
            action="<c:out value="${pageContext.servletContext.contextPath}" />/CompleteServlet"
            method="get">
            <input type="text" name="new-task" value="add new task" /> <input
                type="submit" value="Completed" />
        </form>
    </body>
    </html>
    

    Sclass.java

    import javax.servlet.http.*;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.*;
    
    public class Sclass extends HttpServlet {
    
        private static final long serialVersionUID = 7806370535291118571L;
    
           public void init() throws ServletException {
              // Do required initialization
              System.out.println("init()");
           }
    
           public void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
              System.out.println("doGet() called");
    
              HttpSession session= request.getSession();
              String submittedTask = (String) request.getParameter("new-task");
              System.out.println(submittedTask);
              @SuppressWarnings("unchecked")
            ArrayList<String> arrOfCompleteTask = (ArrayList<String>) session.getAttribute("completeTasks");
    
              if (arrOfCompleteTask == null)
                  arrOfCompleteTask = new ArrayList<>();
    
              System.out.println(arrOfCompleteTask.size());
    
              if (arrOfCompleteTask.size() >= 1)
              {
                  for (int i = 0 ; i < arrOfCompleteTask.size(); ++i) {
                      System.out.println(arrOfCompleteTask.get(i));
                  }
              }
    
              if (submittedTask != null) 
              {
                  arrOfCompleteTask.add(submittedTask);
              }
    
              session.setAttribute("completeTasks", arrOfCompleteTask);
    
              request.getRequestDispatcher("/jfile.jsp").forward(request,response);
           }
    
           public void destroy() {
               System.out.println("destroy()");
           }
    
    }
    

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>TestServlet</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    
    
      <servlet>
      <servlet-name>sname</servlet-name>
      <servlet-class>Sclass</servlet-class>
      </servlet>
    
      <servlet-mapping>
       <servlet-name>sname</servlet-name>
       <url-pattern>/CompleteServlet</url-pattern>
    </servlet-mapping>
    
    
    </web-app>
    

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多