从接口信息创建列表
Create a list from interface information
我有以下代码:
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
//ingrediente = request.getParameter("Ingredientes");
//action = request.getParameter("action");
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)) {
request.setAttribute("AllIngredients", RecetaDao.getSomeReceipes(ingrediente));
request.getRequestDispatcher("perIngredient.jsp").forward(request, response);
} else if ("Agregar ingrediente".equalsIgnoreCase(action)) {
do {
ingrediente = request.getParameter("Ingredientes");
action = request.getParameter("action");
lIngredients.add(ingrediente);
} while ("Agregar ingrediente".equalsIgnoreCase(action));
}
我想从它做的是从界面中获取成分并将其保存在列表中。问题是每次我在列表中保存相同的成分。
这就是我想做的:
- 用户写:
Tomato
- 列表信息:
Tomato
用户按:agregar ingrediente
(添加成分)
用户写入:Salt
- 列表信息:
Tomato, Salt
用户按:agregar ingrediente
(添加成分)
用户写:Butter
- 列表信息:
Tomato, Salt, Butter
用户按:agregar ingrediente
(添加成分)
用户写入:Lettuce
- 列表信息:
Tomato, Salt, Butter, Lettuce
- 用户按下:
buscar por ingredientes
这是我的:
- 用户写:
Tomato
- 列表信息:
Tomato
- 用户按下:
agregar ingrediente
(添加成分)
第一次之后,我得到了一个永无止境的循环,其中包含 Tomato,Tomato,Tomato,Tomato...
我该怎么做?
这是正确的代码:
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");
}
}
这是一个网络应用程序。
Web 应用程序通过接受来自用户的数据并显示某种结果(可能包括新表单)来工作。 然后结束。 servlet 结束了,没有什么可做的了。除了请求中已有的信息,您无法从用户那里获得更多信息。
那么您如何与用户互动,通过多个输入构建一些东西?您当然不能像在控制台程序中那样在循环中执行此操作。
您所做的是将您已经获得的数据永久保存在某个地方。例如,在会话中。然后您使用 JSP 显示下一个输入的表单。然后你的 servlet 结束。
但是用户在他的浏览器上得到了那个表单。如果他决定继续工作,他会向您发送填有新信息的表格。他再次调用您的 servlet。您的 servlet 必须取回它在会话中保存的数据,并像在循环的下一次迭代中一样继续。
您的 servlet 如何知道它处于循环的哪一次迭代?好吧,如果没有保存的会话数据,那就是交互的开始。如果有保存的数据,应该有足够的数据继续。例如,如果您在会话中保存了列表的内容,那么下次调用 servlet 时,您将首先检查是否有列表。如果是这样,那么您将添加它。如果没有,您将创建一个新列表并将其保存在会话中。
底线:没有需要用户输入的循环。
现在,这就是你现在拥有的:
do {
ingrediente = request.getParameter("Ingredientes");
action = request.getParameter("action");
lIngredients.add(ingrediente);
} while ("Agregar ingrediente".equalsIgnoreCase(action));
您将信息添加到您创建的新列表中。但是你有一个无限循环,因为 action
在 servlet 的当前 运行 中永远不会改变。因为它不会改变,所以这是一个无限循环。
您必须首先检查您的会话中是否保存了列表,如果有,则添加到其中。如果没有,请创建一个。但是你只添加了一项,然后你必须再次显示表格并完成。
我有以下代码:
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
//ingrediente = request.getParameter("Ingredientes");
//action = request.getParameter("action");
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)) {
request.setAttribute("AllIngredients", RecetaDao.getSomeReceipes(ingrediente));
request.getRequestDispatcher("perIngredient.jsp").forward(request, response);
} else if ("Agregar ingrediente".equalsIgnoreCase(action)) {
do {
ingrediente = request.getParameter("Ingredientes");
action = request.getParameter("action");
lIngredients.add(ingrediente);
} while ("Agregar ingrediente".equalsIgnoreCase(action));
}
我想从它做的是从界面中获取成分并将其保存在列表中。问题是每次我在列表中保存相同的成分。
这就是我想做的:
- 用户写:
Tomato
- 列表信息:
Tomato
用户按:
agregar ingrediente
(添加成分)用户写入:
Salt
- 列表信息:
Tomato, Salt
用户按:
agregar ingrediente
(添加成分)用户写:
Butter
- 列表信息:
Tomato, Salt, Butter
用户按:
agregar ingrediente
(添加成分)用户写入:
Lettuce
- 列表信息:
Tomato, Salt, Butter, Lettuce
- 用户按下:
buscar por ingredientes
这是我的:
- 用户写:
Tomato
- 列表信息:
Tomato
- 用户按下:
agregar ingrediente
(添加成分)
第一次之后,我得到了一个永无止境的循环,其中包含 Tomato,Tomato,Tomato,Tomato...
我该怎么做?
这是正确的代码:
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");
}
}
这是一个网络应用程序。
Web 应用程序通过接受来自用户的数据并显示某种结果(可能包括新表单)来工作。 然后结束。 servlet 结束了,没有什么可做的了。除了请求中已有的信息,您无法从用户那里获得更多信息。
那么您如何与用户互动,通过多个输入构建一些东西?您当然不能像在控制台程序中那样在循环中执行此操作。
您所做的是将您已经获得的数据永久保存在某个地方。例如,在会话中。然后您使用 JSP 显示下一个输入的表单。然后你的 servlet 结束。
但是用户在他的浏览器上得到了那个表单。如果他决定继续工作,他会向您发送填有新信息的表格。他再次调用您的 servlet。您的 servlet 必须取回它在会话中保存的数据,并像在循环的下一次迭代中一样继续。
您的 servlet 如何知道它处于循环的哪一次迭代?好吧,如果没有保存的会话数据,那就是交互的开始。如果有保存的数据,应该有足够的数据继续。例如,如果您在会话中保存了列表的内容,那么下次调用 servlet 时,您将首先检查是否有列表。如果是这样,那么您将添加它。如果没有,您将创建一个新列表并将其保存在会话中。
底线:没有需要用户输入的循环。
现在,这就是你现在拥有的:
do {
ingrediente = request.getParameter("Ingredientes");
action = request.getParameter("action");
lIngredients.add(ingrediente);
} while ("Agregar ingrediente".equalsIgnoreCase(action));
您将信息添加到您创建的新列表中。但是你有一个无限循环,因为 action
在 servlet 的当前 运行 中永远不会改变。因为它不会改变,所以这是一个无限循环。
您必须首先检查您的会话中是否保存了列表,如果有,则添加到其中。如果没有,请创建一个。但是你只添加了一项,然后你必须再次显示表格并完成。