Создать ArrayList на сервлете

1

У меня проблема с созданием списка на Servlet. У меня есть следующий код:

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    List lIngredients = new ArrayList<>();
    String ingrediente = request.getParameter("Ingredientes");
    String action = request.getParameter("action"); //elegimos a qué pantalla pasar en función de la acción que nos llegue de la interfaz

    if ("Buscar todas las recetas".equalsIgnoreCase(action)) {
        request.setAttribute("AllReceipes", RecetaDao.getAllReceipes());
        request.getRequestDispatcher("receipes.jsp").forward(request, response);
    }else if ("Buscar por ingredientes".equalsIgnoreCase(action)){
              lIngredients.add(ingrediente);
              request.setAttribute("AllIngredients", RecetaDao.getSomeReceipes(lIngredients));
              request.getRequestDispatcher("perIngredient.jsp").forward(request, response);
    }else if ("Agregar ingrediente".equalsIgnoreCase(action)){
             lIngredients.add(ingrediente);
    }
    }

Проблема заключается в том, что я все время сохраняю одно и то же значение. Я не знаю, можно ли сбросить строки "componentiente" и "action", которые я создал, и позволить пользователю выбрать другое значение из JSP.

Благодарю.

Это JSP:

'<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <form action="./optionServlet" method="POST">     
    <table border="1">
        <form action="demo_form.asp" autocomplete="on">     
        <th><FONT FACE="Times New Roman" SIZE=3> Ingredientes: </th>
        <td><input type="text" name="Ingredientes" value="${Receta.Ingredientes}" list="datalist1" /></td>
        <datalist id="datalist1">
             <option value="Aceite"><option value="AceiteOliva"> <option value="AceitunasNegras"><option value="Ajo"><option value="Albahaca">
             <option value="AlbahacaFresca"><option value="Azucar"><option value="CarnePicada"><option value="Cebolla"><option value="CebollaMorada">
             <option value="Croutons"><option value="DienteDeAjo"><option value="Espinaca"><option value="FileteSalmon"><option value="Guisantes">
             <option value="Harina"><option value="Huevo"><option value="LaminaParaCanelones"><option value="Lechuga"><option value="Macarrones">
             <option value="Mantequilla"><option value="MasaPizza"><option value="Miel"><option value="Mostaza"><option value="Oregano">
             <option value="PanRallado"><option value="Patata"><option value="PechugaPollo"><option value="Pepino"><option value="Perejil"><option value="Pimienta">
             <option value="PimientoRojo"><option value="QuesoFeta"><option value="QuesoMozzarella"><option value="QuesoParmesano"><option value="QuesoRicota">
             <option value="Sal"><option value="SalsaQueso"><option value="Tomate"><option value="TomateTriturado"><option value="Zanahoria">
        </datalist>
        <button><input type="submit" name="action" value="Buscar todas las recetas" /></button>
        <button><input type="submit" name="action" value="Buscar por ingredientes" /></button>
        <button><input type="submit" name="action" value="Agregar ingrediente" /></button>
        <table>
            <tr>
                <td> <font color="#74DF00"><b><c:out value="${mensajesOK}"/></b></font> </td>'

Это правильный код:

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    HttpSession session = request.getSession();
    List lIngredients = (List) session.getAttribute("Ingredientes");
    response.setContentType("text/html;charset=UTF-8");
    if (lIngredients == null) {
       lIngredients = new ArrayList<>();
       session.setAttribute("Ingredientes", lIngredients);
    }
    String ingrediente = request.getParameter("Ingredientes");
    String action = request.getParameter("action"); //elegimos a qué pantalla pasar en función de la acción que nos llegue de la interfaz

    if ("Buscar todas las recetas".equalsIgnoreCase(action)) {
        request.setAttribute("AllReceipes", RecetaDao.getAllReceipes());
        request.getRequestDispatcher("receipes.jsp").forward(request, response);
    }else if ("Buscar por ingredientes".equalsIgnoreCase(action)){
              lIngredients.add(ingrediente);
              request.setAttribute("AllIngredients", RecetaDao.getSomeReceipes(lIngredients));
              request.getRequestDispatcher("perIngredient.jsp").forward(request, response);
    }else if ("Agregar ingrediente".equalsIgnoreCase(action)){
             lIngredients.add(ingrediente);
             request.getRequestDispatcher("option.jsp").forward(request, response);
             ingrediente = request.getParameter("Ingredientes");
             action = request.getParameter("action");
    }
}
  • 0
    «Я все время сохраняю одно и то же значение» - не могли бы вы объяснить, что вы подразумеваете под этим?
  • 0
    У меня есть страница JSP, где у меня есть список ингредиентов. Я бы все время хотел выбрать другой, вместо того чтобы получить информацию о параметре «ингридиенты», я не могу выбрать новый, поэтому все время сохраняю один и тот же ингредиент, который написал для первого время
Показать ещё 8 комментариев
Теги:
arraylist
jsp
servlets

1 ответ

1
Лучший ответ

Проблема в том, что вы создаете новый List при каждом запросе.

List lIngredients = new ArrayList<>();

Поскольку это локальная переменная, она перестает существовать, как только этот запрос завершается. Так, что предыдущие значения доступны, когда пользователь решает, наконец, искать рецепты, вы должны сохраняться ингредиентом List на сессию.

HttpSession session = request.getSession();
List lIngredients = (List) session.getAttribute("Ingredientes");

if (lIngredients == null) {
    List lIngredients = new ArrayList<>();
    session.setAttribute("Ingredientes", lIngredientes);
}
  • 0
    Большое спасибо!!! У меня есть это! Я поставлю правильный ответ!
  • 0
    Пожалуйста, обратите внимание, что вам нужно будет добавить список в session тоже. В противном случае session.getAttribute() всегда будет возвращать null . Я пропустил это и обновил это в своем ответе сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню