2011-01-27 25 views
5

Tôi muốn hiểu cách JSF lưu trữ chế độ xem và khôi phục chế độ xem. Tôi đã đọc rằng nó đang tạo ra các id xem riêng biệt cho mỗi lần xem và lưu trữ nó trên máy chủ. Sau đó, nó lấy. Sau đây là các câu hỏi của tôi:Lưu trữ ID xem trong JSF

  • Trong id cơ sở nào được tạo và lưu trữ?
  • Được tạo dựa trên thông báo của JSP trên faces-config.xml?
  • Về cơ bản, nó được tạo cho mỗi ID chế độ xem JSP?
  • Làm cách nào để xem id chế độ xem để hiển thị phản hồi? Nó có được thông qua trong tham số yêu cầu không?

Trả lời

8

Trong id chế độ xem cơ sở nào được tạo và lưu trữ?

ID chế độ xem là đường dẫn tương đối ngữ cảnh của tệp chế độ xem. Ví dụ. /foo.jsp hoặc /foo.xhtml. Việc triển khai ViewHandler có trách nhiệm tạo và lưu trữ nó trong UIViewRoot.

Được tạo dựa trên thông báo của JSP trên faces-config.xml?

Chúng không nhất thiết phải được khai báo ở bất kỳ đâu trong faces-config.xml. Đối với mỗi đến yêu cầu, nó được chiết xuất từ ​​yêu cầu URI bởi các đối tượng cơ bản HttpServletRequest bởi getPathInfo() hoặc getServletPath() phương thức của nó, tùy thuộc vào việc FacesServlet bản thân được ánh xạ với mẫu tiền tố (/faces/*) hoặc mẫu hậu tố (*.jsf) tương ứng.

Khi JSF cần điều hướng đến một mới nhìn theo một <navigation-case> trong faces-config.xml thì xem ID mới chỉ đơn giản là chiết xuất từ ​​nó và một mới UIViewRoot được tạo ra vào cuối giai đoạn hành động invoke. Nếu không JSF chỉ quay trở lại cùng một giao diện khi yêu cầu được bắt nguồn.

Về cơ bản nó được tạo cho mỗi ID chế độ xem JSP?

Có, mỗi chế độ xem có số nhận dạng duy nhất riêng, về cơ bản chỉ là vị trí của nó trong ngữ cảnh ứng dụng web.

Làm cách nào để xem id xem để trả lời? Nó có được thông qua trong tham số yêu cầu không?

Chúng được lưu trữ trong UIViewRoot mà lần lượt chỉ có sẵn theo FacesContext#getViewRoot(). Việc triển khai ViewHandler chỉ cần gọi getViewId() trong phương thức renderView().

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