Задать вопрос
@parkito

Как в jsp привязать удалить определенный элемент из таблицы?

Здравствуйте. Помогите пожалуйста решить проблему. Есть база данных. Из нее я читаю таблицу. Вывожу ее на web-страницу c помощью jpa/jsp. Я хочу. чтобы пользователь мог выбрать ту или иную строку и удалит ее.

Вот, например, я вывожу таблицу из двух колонок. В третьей колонке вывожу кнопки. Хочу чтобы при нажатии той или иной кнопки, я мог индентифицировать что нажато и обработать это.

<table class="table">
                <thead>
                <tr>
                    <th>#</th>
                    <th>Number</th>
                    <th>Status</th>
                    <th>Action</th>
                </tr>
                </thead>
                <tbody>

                <%
                    ContractServiceImpl contractService = new ContractServiceImpl();
                    List<Contract> contracts = contractService.getAllContractsForUser(user.getUserId());
                    for (int i = 0; i < contracts.size(); i++) {
                        if (contracts.get(i).getIsBlocked())
                            out.print("<tr class=\"danger\">");
                        else out.print("<tr class=\"active\">");
                %>
                <th scope="row"><%out.print(i + 1);%></th>
                <td><%out.print(contracts.get(i).getNumber());%></td>
                <%
                    if (contracts.get(i).getIsBlocked())
                        out.print("<td>Blocked</td>");
                    else
                        out.print("<td>Active</td>");

                    if (contracts.get(i).getIsBlocked())
                        out.print("<td><button type=\"button\" class=\"btn btn-success\" data-toggle=\"modal\" data-target=\"#myModalGreen\">\n" +
                                "UnBlock</button></td>");
                    else
                        out.print("<td><button type=\"button\" class=\"btn btn-danger\" data-toggle=\"modal\" data-target=\"#myModal\">\n" +
                                "Block</button></td>");

                %>

                <td>
                </td>
                </tr>
                <%}%>
                </tbody>
  • Вопрос задан
  • 2421 просмотр
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
EugeneP2
@EugeneP2
Java Dev
1. JSP скриплеты - это очень плохой тон и не рекомендуется делать.

Это нужно делать в сервлете (не в jsp)
ContractServiceImpl contractService = new ContractServiceImpl();
     List<Contract> contracts = contractService.getAllContractsForUser(user.getUserId());


потом contracts передавать в jsp через атрибут реквеста

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     ContractServiceImpl contractService = new ContractServiceImpl();
     List<Contract> contracts = contractService.getAllContractsForUser(user.getUserId());

   request.setAttribute("contracts",contracts);
   RequestDispatcher requestDispatcher; 
   requestDispatcher = request.getRequestDispatcher("/you_jsp_page.jsp");
  requestDispatcher.forward(request, response);
}


и потом уже на стороне JSP с помощью JSTL выводить данные
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<hmtl>
...
<body>
<table>
<c:forEach items="${contracts}" var="contr">
<tr>
   <td>${contr.name}</td>
   <td>${contr.number}</td>

  ....
</tr>
</c:forEach>
</table>
</body>
</hmtl>


2. Если пока не хотите заморачиваться с JavaScript-ом и AJAX-ом, то есть более простой вариант с формой.

а) у сущности Contract должен быть уникальный id, по которому вы могли бы удалить/выбрать/изменить его.

б) в JSP вашу таблицу в тег и добавьте еще один столбец с чекбоксом, у которого в качестве value будит id Contract-а. Добавить кнопку "Удалить выбранное".

<form method="post" action="ваш сервлет">
<input type="submit" value="Удалить выбранное"/>
<table>
<c:forEach items="${contracts}" var="contr">
<tr>
   <td><input type="checkbox" name="id" value="${contr.id}"/></td>
   <td>${contr.name}</td>
   <td>${contr.number}</td>

  ....
</tr>
</c:forEach>
</table>
</form>


с) Реализовать в вашем сервлете метод обработки пост запросов где получите из реквеста выбранные Id и выполните удаление.

@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		String[] ids = req.getParameterValues("id");

		if (ids != null && ids.length > 0) {
			ContractServiceImpl contractService = new ContractServiceImpl();
			contractService.removeAll(ids);
		}

		doGet(req, resp); 
	}


doGet(req, resp); - метод реализован выше. Произойдет новая выборка контрактов, только уже без удаленных и передастся в JPS. Обновится страница
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
В обработчик нажатия кнопки передавать id сущности которую хотите обработать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы