Почему JSP дублирует записи на стороне клиента при обновлении? - PullRequest
0 голосов
/ 23 апреля 2020
Страница

Моя JSP дублирует запись, отображаемую на стороне клиента при обновлении. Я попробовал другой проект с тем же процессом, но он работает нормально. Вот скриншот страницы. Изображение

Вот мой код в приветственном файле (контроллер)

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    List<Todo> todos = null;
    try {
        todos = todoDaoImpl.getTodos();
        request.setAttribute("todo_list", todos);
        request.getRequestDispatcher("views/list-todo.jsp").forward(request, response);
    } catch (Exception e) {
        logger.warning("Error in list todo");
    }
}

JSP код

<table class="table table-striped">
  <caption>Your Todos are:</caption>
  <tr>
    <th id="desc">Description</th>
    <th id="category">Category</th>
    <th id="action">Action</th>
  </tr>

  <tbody>
    <c:forEach items="${todo_list}" var="todo">
      <tr>
        <td>${todo.todos}</td>
        <td>${todo.category}</td>
        <td><a href="${loadTodoLink}" class="btn btn-primary">Update</a>
          <a class="btn btn-danger" href="${deleteLink}" onclick="if(!(confirm('Do you want to delete this?'))) return false">Delete</a></td>
      </tr>
    </c:forEach>
  </tbody>
</table>

Код DAO

List<Todo> todos = new ArrayList<>();

@Override
public List < Todo > getTodos() throws Exception {
    String sql = "SELECT * from todo";

    try (Connection conn = dataSource.getConnection();
            PreparedStatement stmt = conn.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            int id = rs.getInt("id");
            String todo = rs.getString("todo");
            String category = rs.getString("category");

            todos.add(new Todo(id, todo, category));
        }
        return todos;
    }
}

1 Ответ

0 голосов
/ 23 апреля 2020

В вашем коде DAO у вас есть это: todos.add(new Todo(id, todo, category));.

Каждый раз, когда вы нажимаете метод getTodos(), который вы добавляете в список.

Либо есть todos list будет частью вашего метода (в отличие от объявления в качестве глобальной переменной), иначе очистите его в методе getTodos(), прежде чем заполнять его.

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