如何计算用户 JSF 会话 (JSF 2.2) 中的视图数?

wsa*_*ton 1 jsf omnifaces view-scope jsf-2.2

我正在尝试跟踪视图使用情况(达到默认的 15 计数限制),但不太确定从哪里获取此信息。它在 FacesContext 中可用吗?

使用 JSF 2.2、ICEfaces 3.3 和 Omnifaces 2.2。

Bal*_*usC 5

它是特定于实现的,并且仅在使用服务器端状态保存时可用。

根据您的问题历史记录和相关的OmniFaces 问题报告,我推测您正在使用 GlassFish,因此使用 Mojarra。物理视图可用作由 键入的会话属性com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap

因此,所以:

Map<String, Map<String, Object[]>> physicalViews = Faces.getSessionAttribute("com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap");
String numberOfViews = physicalViews.size();
// ...
Run Code Online (Sandbox Code Playgroud)

请注意,Mojarra 无意中交换了上下文参数名称和代码库中“物理视图”和“逻辑视图”的含义。因此,上述映射(物理视图)的最大大小可通过 进行配置com.sun.faces.numberOfLogicalViews,嵌套映射(逻辑视图)的最大大小可通过 进行配置com.sun.faces.numberOfViewsInSession

也可以看看: