2011-01-27 37 views
5

我想了解JSF如何存儲視圖和恢復視圖。我讀過它正在爲每個視圖創建單獨的視圖ID並將其存儲在服務器上。然後它檢索。以下是我的問題:在JSF中存儲視圖ID

  • 在什麼基礎視圖id被創建和存儲?
  • 它是基於faces-config.xml中聲明的JSP創建的嗎?
  • 基本上是爲每個JSP創建一個視圖ID?
  • 如何傳遞查看ID以呈現響應?它是否在請求參數中傳遞?

回答

8

在什麼基礎視圖id創建和存儲?

視圖ID是視圖文件的上下文相對路徑。例如。 /foo.jsp/foo.xhtmlViewHandler實現負責創建並將其存儲在UIViewRoot中。

它是基於在faces-config.xml中聲明的JSP創建的嗎?

那些不一定需要在faces-config.xml的任何地方聲明。對於每一個進入的請求,它從該請求中提取URI由底層HttpServletRequest對象通過其getPathInfo()getServletPath()方法,根據是否FacesServlet本身與前綴模式(/faces/*)或分別後綴模式(*.jsf)映射。

當JSF需要導航到新視圖按照一個<navigation-case>faces-config.xml,那麼新的視圖ID被簡單地從它提取出來,由調用操作階段的端部創建新UIViewRoot。否則,JSF會返回到請求發起時的相同視圖。

基本上是爲每個JSP創建一個視圖ID?

是的,每個視圖都有自己的唯一標識符,它基本上就是它在web應用程序上下文中的位置。

如何通過查看ID來呈現響應?它是否在請求參數中傳遞?

它們存儲在UIViewRoot中,而該存儲器又被FacesContext#getViewRoot()提供。在renderView()方法中,ViewHandler實現只調用getViewId()