2012-11-23 44 views
7

Xin chào tất cả tôi đã có một số trang jsp và sử dụng struts2 để xử lý biểu mẫu của tôi. Sau khi gửi biểu mẫu theo người dùng, url được hiển thị trong thanh địa chỉ trở thành somthing.action, vì vậy khi người dùng làm mới trang, các biểu mẫu sẽ được gửi lại. Làm thế nào tôi có thể xử lý này? sau khi gửi biểu mẫu.Tránh trình trùng lặp của trang Struts 2 jsp

Trả lời

4

Nếu mục tiêu là để ngăn chặn việc gửi trùng lặp biểu mẫu, hãy sử dụng token thiết bị chặn http://struts.apache.org/2.x/docs/token-interceptor.html hoặc tokenSession thiết bị chặn http://struts.apache.org/2.x/docs/token-session-interceptor.html.

Nếu bạn đơn giản muốn làm mới trang sau khi gửi mà không gửi lại, hãy chuyển hướng đến hành động mà bạn chỉ hiển thị kết quả không dưới dạng. Sử dụng kết quả redirectAction cho điều đó.

+0

Cảm ơn bạn Aleksandr M .... – edaklij

1

POST REDIRECT GET

mô hình này cần phải được theo sau để ngăn ngừa tái nộp mẫu đơn trên refresh. Điều này có nghĩa là, sau khi gửi yêu cầu POST, POST phải gửi phản hồi REDIRECT để tìm nạp trang đích bằng cách sử dụng GET. Với mẫu này, nếu người dùng làm mới trang, chỉ yêu cầu GET xảy ra lần nữa, vì vậy cùng một trang được tìm nạp mà không cập nhật bất kỳ thứ gì trong máy chủ.

Đây là mẫu thiết kế chung được đề xuất cho web. Google sẽ cung cấp nhiều tài nguyên về điều này.

3

+1 cho cả hai câu trả lời khác.

Post/Redirect/Get là Mẫu cổ điển cho mọi công nghệ web.

Token Interceptor là một cách khác để thực hiện khi bạn đang sử dụng Struts2;

Có một cách thứ ba để thực hiện, nếu bạn không quan tâm đến tính tương thích với các trình duyệt cũ hoặc các trình duyệt đã tắt Javascript: HTML5 's window.history.pushState.

Chỉ cần đặt lại url thành trang gốc sau khi trang được tải và nhấn F5 sẽ nhận được trang gốc thay vì gửi lại yêu cầu.

$(document).ready(function() { 
    window.history.pushState("","", "myOriginalUrlWithNoParams"); 
}); 
+1

+1 cho HTML5 trick. –

Các vấn đề liên quan