我想了解JSF如何存储视图和恢复视图。我已经读过它正在为每个视图创建单独的视图ID并将其存储在服务器上。然后它检索。以下是我的问题:
答案 0 :(得分:7)
在什么基础上创建和存储视图ID?
视图ID是视图文件的上下文相对路径。例如。 /foo.jsp
或/foo.xhtml
。 ViewHandler
实现负责创建它并将其存储在UIViewRoot
。
是否基于在faces-config.xml上声明的JSP创建?
这些不一定需要在faces-config.xml
中的任何地方声明。对于每个传入请求,它由getPathInfo()
或getServletPath()
方法由基础HttpServletRequest
对象从请求URI中提取,具体取决于{{1} }本身分别用前缀模式(FacesServlet
)或后缀模式(/faces/*
)映射。
当JSF需要根据*.jsf
中的<navigation-case>
导航到新视图时,只需从中提取新的视图ID并使用新的{{1在调用动作阶段结束时创建。否则,JSF只会返回与请求发起时相同的视图。
基本上它是为每个JSP创建的一个视图ID吗?
是的,每个视图都有自己的唯一标识符,基本上只是它在webapplication上下文中的位置。
如何传递视图ID以呈现响应?它是否在请求参数中传递?
它们存储在faces-config.xml
中,而UIViewRoot
只能使用UIViewRoot
。 ViewHandler
实施仅在FacesContext#getViewRoot()
方法中调用getViewId()
。