Java-сервлет и JSP не могут изначально просматривать arraylist из сеанса - PullRequest
0 голосов
/ 20 сентября 2018

Я - полный новичок в JSP и сервлетах, и я был бы признателен, если бы вы помогли мне с этой небольшой проблемой.У меня есть файл index.html, который содержит ссылки на два файла JSP: addItem.jsp (пользователь может вводить элемент в свой список todDo и отправлять ссылки на кнопки сервлету) и toDoList.jsp (показывает список toDO и перенаправляет с помощью кнопкиto addItem.jsp)

Проблема, с которой я сталкиваюсь, заключается в том, что при просмотре файла toDoList.jsp перед добавлением элемента в список список не отображается.Однако я добавляю элемент в addItem.jsp, список отображается из сервлета, и теперь я могу просмотреть полный список, включая элемент, который был добавлен в DoList.jsp.

Как я могу изменить свой кодчтобы мне не нужно было что-то добавлять в список для просмотра?

toDoList.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="javax.servlet.http.HttpSession" %>
<%@page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <h1>My ToDo List:</h1>

    <% ArrayList<String> toDoList = new ArrayList<String>();%>

    <% if(session.getAttribute("toDoList") != null) {  // If the list exists in the session %>  
    <%   toDoList = (ArrayList<String>) session.getAttribute("toDoList");%> 
    <%   for(String toDoItem:toDoList) { %>
    <%      out.println(toDoItem); %><br>
    <%   } %>
    <% } else {%>

    <h3>Your list is empty!</h3>
    <% } %>
    <form action="addItem.jsp" method="post">
        <fieldset>
            <input type="submit" value="Add Item">
        </fieldset>
    </form>
</body>

addItem.jsp:

<!DOCTYPE html>
<html>
<head>
    <title>TODO supply a title</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <form action="Servlet1" method="post">
        <fieldset>
            <label>New ToDo Item:</label>
            <input type="text" name="item"><br>
            <input type="submit" value="Submit">
        </fieldset>
    </form>         
</body>

Основной код Servlet1:

@WebServlet(urlPatterns = {"/Servlet1"})
public class Servlet1 extends HttpServlet {

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

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    String item = request.getParameter("item");
    toDoList.add(item);

    HttpSession session = request.getSession();

    boolean is_toDoList_Initilized = false;

    if(session.getAttribute("toDoList") == null) {  
        is_toDoList_Initilized = false;  
        session.setAttribute("toDoList", toDoList);
    } else is_toDoList_Initilized = true;


    try (PrintWriter out = response.getWriter()) {
        /* TODO output your page here. You may use following sample code. */
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet Servlet1</title>");            
        out.println("</head>");
        out.println("<body>");
        for(String toDoItem:toDoList) { 
            out.println(toDoItem + "<br>");  
        }  
        out.println(is_toDoList_Initilized);
        out.println("</body>");
        out.println("</html>");
    }
}

1 Ответ

0 голосов
/ 20 сентября 2018

Я думаю, вам просто нужно вызвать этот сервлет перед перенаправлением вашего toDoList.jsp со страницы индекса.

Поток будет похож на

flow 1: index.jsp> servlet1> toDoList

поток 2: index.jsp> addItem.jsp> servlet1> toDoList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...