我想了解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()
。