01/10/2018, 08:33

Submit form trong jsp

Anh chị cho em hỏi em có 1 trang JSP sau khi submit giá trị lên Servlet nó lưu vào Database rồi…Nếu em F5 lại 1 lần nữa thì nó lại lưu thêm 1 lần nữa…Em xin hỏi là có cách nào để ngăn k cho nó submit khi F5 không ạ
Em xin cảm ơn

Hidan viết 10:33 ngày 01/10/2018

hóng câu trả lời :3
mh cũng mới học, thấy khi f5 lại nó có đoạn thông báo này mà :

Tran Xuan Son viết 10:35 ngày 01/10/2018

http://stackoverflow.com/questions/1317486/how-to-avoid-resubmit-in-jsp-when-refresh
Giải pháp ở đây
Mình tạm dịch như sau, có 2 giải pháp cho vấn đề trên:

  1. POST+REDIRECT+GET pattern: nghĩa là khi bạn submit lên sử dụng post -> servlet nhận dữ liệu và lưu vào database -> servlet redirect lại
  2. ajax, thay nút submit bây giờ bạn cho nó là 1 button bình thường, rồi đăng ký sự kiện onclick, khi user click thì sử dụng ajax để đẩy lên
tieulong viết 10:36 ngày 01/10/2018

Nhưng nếu dùng SendRedirect thì bên trang jsp không nhận được dữ liệu bên Controller gửi về ạ…như thế sẽ không hiện được danh sách dưới database lên trang View

Hidan viết 10:38 ngày 01/10/2018

mh xem trong đây ng ta làm có 2 cái servlet chẳng hiểu gì luôn : ai giải thích giùm vs :3

http://theopentutorials.com/tutorials/java/design-patterns/post-redirect-get-prg-pattern-in-servlet-jsp/

Hidan viết 10:41 ngày 01/10/2018

dùng ajax đó nhanh hơn, vì cái kia nó là onclick ko phải submit nên tải lại nó ko bị lưu lại lần nữa .

Hidan viết 10:41 ngày 01/10/2018

à đâu onclick vs submit đều ko bị hic :3

Reoteu Ray viết 10:49 ngày 01/10/2018

bạn để ý nếu bạn gửi 1 request bất kì thì trên url của nó sẽ chứa nội dung của request >>> nếu bạn f5 hoặc reload lại trang thì cũng tương đương với việc chạy lại cái request đó

  1. dùng redirect để thay đổi cái url request >>> sau khi thực thi request thì url lúc này là url đã redirect chứ ko phải url của form nữa (vd : form có action=deleteProduct.do nếu ta ko dùng redirect thì khi f5 nó sẽ chạy lại cái deleteProduct.do , còn nếu redirect nó sẽ trả về cho ta 1 requestmapping khác chẳng hạng index.do )
  2. dùng ajax lúc này request sẽ truyền về theo kiểu bất đồng bộ nên có f5 hay reload lại trang thì nó cũng ko submit form
  3. còn cái hình minh họa đó nó đang giải thích cách dùng redirect để xử lý đó , request gửi về server xử lý xong sẽ không gửi ngay cho client mà redirect sang 1 controller khác tại controller này sẽ xác định trang mà bạn muốn client thấy
Hidan viết 10:47 ngày 01/10/2018

hic b nói tiếng việt mà t vẫn thấy mông lung =))

Reoteu Ray viết 10:39 ngày 01/10/2018

bạn xem cái hình mà bạn post lên nó đã giải thích hết rồi đó
nếu bạn submit form nó sẽ chạy request : servletPRGMVC/employee.do nhưng trên url của trang web bạn sẽ chỉ thấy request : servletPRGMVC/displayEmployee.do >>>nếu bạn có f5 trang đi nữa thì nó sẽ chỉ chạy ervletPRGMVC/displayEmployee.do mà không chạy servletPRGMVC/employee.do bạn cứ viết code ra đi sẽ thấy …

Reoteu Ray viết 10:40 ngày 01/10/2018

cái này bên spring framework nó có hỗ trợ 1 kiểu model đó là RedirectAttribute tức là các model này sẽ tồn tại cho đến redirect tiếp theo , nếu dùng jsp thuần thì bạn phải lưu dữ liệu của request trước lại và truyền cho redirect tiếp theo dùng biến session hoặc biến request đều được…

Bài liên quan
0