【问题标题】:How do I count the number of views in a user's JSF session (JSF 2.2)?如何计算用户 JSF 会话 (JSF 2.2) 中的查看次数?
【发布时间】:2026-02-12 16:25:01
【问题描述】:

我正在尝试跟踪视图使用情况(违反了默认的 15 计数限制),但不太确定从何处获取此信息。它在 FacesContext 的某个地方可用吗?

使用 JSF 2.2、ICEfaces 3.3 和 Omnifaces 2.2。

【问题讨论】:

    标签: jsf jsf-2.2 omnifaces view-scope


    【解决方案1】:

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

    根据您的问题历史记录和相关的OmniFaces issue report,我推测您使用的是 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();
    // ...
    

    请注意,Mojarra 无意中在上下文参数名称和代码库中交换了“物理视图”和“逻辑视图”的含义。因此,上述地图(物理视图)的最大尺寸由com.sun.faces.numberOfLogicalViews 配置,嵌套地图(逻辑视图)的最大尺寸由com.sun.faces.numberOfViewsInSession 配置。

    另见:

    【讨论】: