2010-05-12 46 views
16

Hãy xem ở dưới đây dòng mã trong JSFJSF: yêu cầu ban đầu và yêu cầu đăng lại?

<h:inputText id="name" value="#{customer.name}" /> 

Trích từ java.sun.com:

Đối với yêu cầu ban đầu của trang có chứa từ khóa này, JavaServer Faces thực hiện đánh giá biểu thức #{customer.name} trong pha phản hồi kết xuất của vòng đời. Trong giai đoạn này, biểu thức chỉ truy cập giá trị của tên từ bean khách hàng, như được thực hiện trong đánh giá ngay lập tức.

Để yêu cầu đăng lại, thực thi JavaServer Faces đánh giá biểu thức ở các giai đoạn khác nhau của vòng đời, trong đó giá trị được lấy ra từ yêu cầu, được xác thực và được truyền cho bean khách hàng.

Tôi không chắc là tôi hiểu yêu cầu ban đầu vs postback yêu cầu. Trình duyệt của khách hàng có thực hiện hai yêu cầu khác nhau cho máy chủ web không?

Trả lời

12

Yêu cầu ban đầu là yêu cầu trình duyệt thực hiện để hiển thị trang bằng thẻ ${customer.name}. Đăng lại xảy ra khi trình duyệt đăng một số hoặc tất cả các giá trị trang và sau đó cùng một trang được đăng ở địa điểm đầu tiên sẽ được trả lại cho máy khách. Điều này có thể xảy ra ví dụ như là kết quả của một lỗi xác thực.

Biết nếu chế độ xem hiện tại được hiển thị là kết quả của quá trình đăng lại có ích. Ví dụ, bạn có thể muốn hiển thị một tin nhắn như là kết quả của một postback, nhưng không phải mỗi lần trang được làm mới.

23

Chỉ yêu cầu ban đầu Chỉ khôi phục Chế độ xem lại & Trả lại các giai đoạn phản hồi, trong khi yêu cầu đăng lại theo tất cả các giai đoạn (Áp dụng giá trị yêu cầu, Giai đoạn xác thực, v.v.).

Yêu cầu ban đầu được tạo bằng cách nhấp vào liên kết, dán URL vào thanh địa chỉ, trong khi yêu cầu đăng lại được tạo bằng cách đăng biểu mẫu bằng cách nhấp vào nút gửi hoặc bất kỳ yêu cầu đăng nào.

+1

Không phải lúc nào. Tất cả 6 giai đoạn sẽ được thực thi trong trường hợp yêu cầu GET ban đầu với tham số xem. –

+0

Câu trả lời này không chính xác 100%. Nhận xét của @ShirgillFarhanAnsari là chính xác và câu trả lời được cập nhật tốt hơn. –

0

Thông thường bạn sẽ chỉ có một yêu cầu ban đầu, khi bạn truy cập trình duyệt và ghi URL vào ứng dụng của mình. Điều này tạo yêu cầu HTTP GET cho máy chủ bằng cookie của bạn, ví dụ: JSESSIONID, nhưng không phải với javax.faces.viewid được khôi phục.

Khi bạn có một trang mở và bạn thực hiện các công cụ hacky: window.location = newUrl -> bạn cũng sẽ thực hiện một yêu cầu ban đầu.

Khi thay vào đó bạn làm một cái gì đó như jQuery ("# ​​somoeSubmitButton"). Bấm(), bạn sẽ POST tới máy chủ và chế độ xem cũ của bạn sẽ được khôi phục - và nếu bạn hỏi context context.isPostback()? bạn sẽ nhận được sự thật.

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