我有一个index.jsp页面,在该页面上有一个表单,用户可以在其中输入一些数据,这些数据通过使用Controller Servlet存储在数据库中。
index.jsp
index.jsp在数据库中输入数据后,我想显示与该表单相同的页面()。另外,我想显示用户在数据库中输入的所有条目。
我尝试使用的forward()方法RequestDispatcher。它工作正常(这意味着我能够再次显示相同的表单,并且还可以使用JSTL在表单下显示该用户输入的所有数据)。
forward()
RequestDispatcher
但是问题是每当用户按下Refresh or F5按钮时,所有先前的数据也会输入到数据库中,并且在我显示所有数据时,还会出现重复的条目。
Refresh or F5
我曾考虑过使用POST-REDIRECT-GET模式,但是问题是当我重定向时,我没有使用JSTL显示这些数据。
我该怎么做?
我曾考虑过使用POST-REDIRECT-GET模式,但是问题是当我重定向时,我并没有使用JSTL显示这些数据。
只需发送一个请求参数,同时标识您想要在新的GET请求中显示的信息即可。
// ... Long id = dataService.save(data); // ... response.sendRedirect(request.getContextPath() + "/index?editId=" + id);
然后在映射到以下网址格式的servlet中/index
/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); }