我想了解 JSF 是如何存储 View 和恢复 View 的。我读过它正在为每个 View 创建单独的 View ID 并将其存储在服务器上。然后它检索。以下是我的问题:
- 在什么基础上创建和存储 View ID?
- 它是根据 faces-config.xml 中声明的 JSP 创建的吗?
- 基本上是为每个 JSP 创建一个 View ID 吗?
- 如何传递 View ID 以呈现响应?是不是传入了请求参数?
最佳答案
In what basis view id is created and stored?
View ID 是 View 文件的上下文相对路径。例如。 /foo.jsp
或 /foo.xhtml
. ViewHandler
实现负责创建它并将其存储在 UIViewRoot
中.
Is it created based on the JSP's declared on the faces-config.xml?
那些不一定需要在 faces-config.xml
中的任何地方声明.对于每个传入 请求,它都是由底层 HttpServletRequest
从请求 URI 中提取的对象由其 getPathInfo()
或 getServletPath()
方法,取决于是否 FacesServlet
本身分别用前缀模式 ( /faces/*
) 或后缀模式 ( *.jsf
) 进行映射。
当 JSF 需要根据 <navigation-case>
导航到新 View 时在 faces-config.xml
,然后从中简单地提取新的 View ID 和一个新的 UIViewRoot
在调用操作阶段结束时创建。否则,JSF 只会返回到发起请求时的相同 View 。
Basically is it created for the each JSP one view ID?
是的,每个 View 都有自己唯一的标识符,基本上就是它在 web 应用程序上下文中的位置。
How view ids are passed to render the response? Is it passed in the request parameter?
它们存储在 UIViewRoot
中这反过来又可以通过 FacesContext#getViewRoot()
获得. ViewHandler
实现只是调用 getViewId()
在 renderView()
期间方法。
关于java - 在 JSF 中存储 View ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819738/