Редактирование и удаление элементов коллекции в веб-проекте
господа программисты. Немного осваиваю язык Java, нужна помощь с заданием. У нас есть веб-проект, в котором есть несколько jsp-страничек, сервлетов, класс с пользователями и singleton (класс DatabaseSimulation). В проекте уже реализовано добавление новых пользователей в ArrayList. Нужна помощь с реализацией редактирования и удаления этих пользователей. Немного непонятно, как это делать. Знаю, что в ArrayList удалять можно, используя remove. Но как это реализовать в веб-проекте? И можно ли это сделать динамически (чтобы, кликая на иконки редактирования/удаления), удаление, например, происходило сразу, в зависимости от того, рядом с каким элементом кликнули на иконку (с редактированием так же).
Ниже будет имеющийся на данный момент код. Класс User и DatabaseSimulation:
package entities;
import java.util.Objects;
public class User {
private String name;
private String password;
public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return name.equals(user.name) &&
password.equals(user.password);
}
@Override
public int hashCode() {
return Objects.hash(name, password);
}
}
package model;
import entities.User;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
public class DatabaseSimulation {
private static DatabaseSimulation instance = new DatabaseSimulation();
private static List<User> model;
public static DatabaseSimulation getInstance() {
return instance;
}
private DatabaseSimulation() {
model = new ArrayList<>();
}
public static void clear() {
model.remove("littlefox");
}
public void add(User user) {
model.add(user);
}
public static void deleteUser() {
Iterator<User> it = model.iterator();
while (it.hasNext()) {
User user = it.next();
if (user.getName().equals("littlefox")) {
it.remove();
}
}
public List<String> list() {
return model.stream()
.map(User::getName)
.collect(Collectors.toList());
}
}
Сервлет добавления нового пользователя и сервлет вывода:
package servlets;
import entities.User;
import model.DatabaseSimulation;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/adduser.jhtml")
public class AddServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("pass");
List<String> errors = new ArrayList<>();
if (name.equals(" ")) {
errors.add("Введите логин!");
}
if (password.equals(" ")) {
errors.add("Введите пароль!");
}
if (errors.isEmpty()) {
User user = new User(name, password);
DatabaseSimulation databaseSimulation = DatabaseSimulation.getInstance();
databaseSimulation.add(user);
req.setAttribute("userName", name);
doGet(req, resp);
} else {
req.setAttribute("errors", errors);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/jsp/addUser.jsp");
requestDispatcher.forward(req, resp);
}
}
package servlets;
import model.DatabaseSimulation;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/userpage.jhtml")
public class ListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
DatabaseSimulation databaseSimulation = DatabaseSimulation.getInstance();
List<String> names = databaseSimulation.list();
req.setAttribute("userNames", names);
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/jsp/userPage.jsp");
requestDispatcher.forward(req, resp);
}
}
Jsp-странички для добавления пользователя и вывода пользователей:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>List of users</title>
</head>
<body>
<form method="post">
<c:if test="${userNames != null}">
<table border='1'>
<c:forEach var="names" items="${userNames}" >
<tr>
<td><c:out value="${names}"/></td>
<td><img src='https://img.icons8.com/dotty/18/000000/edit.png' title='Edit a user' /></td>
<td><a href='<c:url value="/deleteuser.jhtml" ><c:param name="user" value="littlefox"/></c:url>' onClick=submit()><img src='https://img.icons8.com/dotty/18/000000/delete-sign.png'title='Remove user'/></a></td>
</tr>
</c:forEach>
</table>
</c:if>
<p><img src='https://img.icons8.com/dotty/30/000000/add.png' title='Add user'
onclick="location.href='/adduser.jhtml'"/></p>
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Добавить пользователя</title>
</head>
<body>
<%
if (request.getAttribute("userName") != null) {
out.println("<p>Пользователь '" + request.getAttribute("userName") + "' добавлен!</p>");
}
%>
<form method="post">
<p><label>Name:
<input type="text" name="name">
</label></p>
<p><label>Password:
<input type="password" name="pass"><br/>
</label></p>
<c:if test="${not empty errors}">
<div style="color: red"><c:out value="Введите все данные!"/></div>
</c:if>
<button type="submit">Добавить</button>
</form>
</body>
</html>