2012-04-10 6 views

Trả lời

18

Điều gì setResponsePage phụ thuộc vào một vài yếu tố: số lần bạn gọi setResponsePage, biến thể nào của setResponsePage bạn gọi và chiến lược nào bạn sử dụng.

Bạn có thể gọi setResponsePage nhiều lần trong khi yêu cầu. Wicket sử dụng cái cuối cùng để làm việc.

Có hai biến thể của setResponsePage: với phiên bản Page và với lớp PagePageParameters. Sau này sẽ gửi một chuyển hướng đến một URL có thể đánh dấu trang cho trình duyệt. Ý chí cựu, tùy thuộc vào render strategy, một trong hai:

  • ONE_PASS_RENDER
    • làm trang trực tiếp cho trình duyệt
  • REDIRECT_TO_BUFFER
    • làm trang để một bộ đệm, gửi một chuyển hướng vào trình duyệt (sau đó truy xuất đánh dấu đã được lưu vào bộ đệm) hoặc
  • REDIRECT_TO_RENDER
    • gửi một chuyển hướng cho trình duyệt, sau đó gửi một yêu cầu để làm cho trang

Vì vậy, tùy chọn đầu tiên là công văn, tùy chọn thứ hai là công văn tiếp theo là một chuyển hướng, và tùy chọn thứ ba sẽ được chuyển hướng trong các điều khoản servlet.

+0

@Martin Dashorst: trình duyệt có thấy 302 trong REDIRECT_TO_BUFFER không? – bert

+1

Chỉ cần thử nó với dự án của tôi: Request URL: http: // localhost: 8080/som/app/home 14-2.ILinkListener-menu-personalia Request Method: GET Status Code: 302 Tìm thấy Vì vậy, có, Wicket gửi 302 trong trường hợp đó. –

+0

@Martin Dashorst: cảm ơn, điều này thực sự giải thích lý do tại sao chúng tôi có 302 mất nhiều thời gian hơn 2, reqeust, vì bộ đệm. Tuyệt vời, một bí ẩn khác đã được giải quyết;) – bert

1

setResponsePage (PageName.class) sẽ chuyển hướng trình duyệt tới PageName bạn cần phải đi. Đảm bảo rằng bạn đã gắn lớp Page.class của bạn vào một đường dẫn đã cho. Ví dụ: trong phương pháp init của ứng dụng, bạn có thể gắn kết như thế này mountPage ("/ home.html", WelcomePage.class); sau đó trong một số trang khác, khi bạn có nhu cầu truy cập trang chủ, bạn chỉ cần gọi như thế này setResponsePage (WelcomePage.class);