一尘不染

如何防止刷新时重复输入?

jsp

我有一个index.jsp页面,在该页面上有一个表单,用户可以在其中输入一些数据,这些数据通过使用Controller Servlet存储在数据库中。

index.jsp在数据库中输入数据后,我想显示与该表单相同的页面()。另外,我想显示用户在数据库中输入的所有条目。

我尝试使用的forward()方法RequestDispatcher。它工作正常(这意味着我能够再次显示相同的表单,并且还可以使用JSTL在表单下显示该用户输入的所有数据)。

但是问题是每当用户按下Refresh or F5按钮时,所有先前的数据也会输入到数据库中,并且在我显示所有数据时,还会出现重复的条目。

我曾考虑过使用POST-REDIRECT-GET模式,但是问题是当我重定向时,我没有使用JSTL显示这些数据。

我该怎么做?


阅读 247

收藏
2020-06-08

共1个答案

一尘不染

我曾考虑过使用POST-REDIRECT-GET模式,但是问题是当我重定向时,我并没有使用JSTL显示这些数据。

只需发送一个请求参数,同时标识您想要在新的GET请求中显示的信息即可。

// ...
Long id = dataService.save(data);
// ...
response.sendRedirect(request.getContextPath() + "/index?editId=" + id);

然后在映射到以下网址格式的servlet中/index

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Long editId = Long.valueOf(request.getParameter("editId")); // Handle nullcheck yourself.
    Data editData = dataService.find(editId);
    request.setAttribute("editData", editData); // For the edit form.
    List<Data> allData = dataService.list();
    request.setAttribute("allData", allData); // For the table/list of all data.
    request.getRequestDispatcher("/index.jsp").forward(request, response);
}
2020-06-08