我想了解JSF如何存儲視圖和恢復視圖。我讀過它正在爲每個視圖創建單獨的視圖ID並將其存儲在服務器上。然後它檢索。以下是我的問題:在JSF中存儲視圖ID
- 在什麼基礎視圖id被創建和存儲?
- 它是基於faces-config.xml中聲明的JSP創建的嗎?
- 基本上是爲每個JSP創建一個視圖ID?
- 如何傳遞查看ID以呈現響應?它是否在請求參數中傳遞?
我想了解JSF如何存儲視圖和恢復視圖。我讀過它正在爲每個視圖創建單獨的視圖ID並將其存儲在服務器上。然後它檢索。以下是我的問題:在JSF中存儲視圖ID
在什麼基礎視圖id創建和存儲?
視圖ID是視圖文件的上下文相對路徑。例如。 /foo.jsp
或/foo.xhtml
。 ViewHandler
實現負責創建並將其存儲在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()
。