在JSF中存储视图ID

Kri*_*hna 6 java jsf

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

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

Bal*_*usC 7

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

视图ID是视图文件的上下文相对路径.例如/foo.jsp/foo.xhtml.该ViewHandler实施负责创建它并将其存储在UIViewRoot.

它是基于在faces-config.xml上声明的JSP创建的吗?

那些不一定需要在任何地方声明faces-config.xml.对于每个传入请求,它由底层HttpServletRequest对象通过其getPathInfo()getServletPath()方法从请求URI中提取,具体取决于FacesServlet它本身是分别用前缀pattern(/faces/*)还是后缀pattern(*.jsf)映射.

当JSF需要按照in 导航到视图<navigation-case>faces-config.xml,只需从中提取新视图ID,并UIViewRoot在调用操作阶段结束时创建新视图ID .否则,JSF只会返回与请求发起时相同的视图.

基本上它是为每个JSP创建的一个视图ID吗?

是的,每个视图都有自己的唯一标识符,这基本上只是它在webapplication上下文中的位置.

如何传递视图ID来呈现响应?它是否在请求参数中传递?

它们存储在UIViewRoot其中,而这些只是由它们提供FacesContext#getViewRoot().该ViewHandler实现只是getViewId()renderView()方法期间调用.