在JSF中存储视图ID

时间:2011-01-27 17:30:48

标签: java jsf

我想了解JSF如何存储视图和恢复视图。我已经读过它正在为每个视图创建单独的视图ID并将其存储在服务器上。然后它检索。以下是我的问题:

  • 在什么基础上创建和存储视图ID?
  • 是否根据在faces-config.xml上声明的JSP创建?
  • 基本上是为每个JSP创建一个视图ID吗?
  • 如何传递视图ID以呈现响应?它是否在请求参数中传递?

1 个答案:

答案 0 :(得分:7)

  

在什么基础上创建和存储视图ID?

视图ID是视图文件的上下文相对路径。例如。 /foo.jsp/foo.xhtmlViewHandler实现负责创建它并将其存储在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只能使用UIViewRootViewHandler实施仅在FacesContext#getViewRoot()方法中调用getViewId()