2011-01-27 36 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()