Java Primefaces选项卡菜单活动选项卡注销时记住

Java Primefaces选项卡菜单活动选项卡注销时记住,java,jsf,primefaces,Java,Jsf,Primefaces,正如标题本身所解释的,我在管理选项卡菜单中当前活动的选项卡时遇到问题。我使用的是JSF2.1W/PF3.4。以下是带有选项卡菜单的代码片段: <h:form> <p:tabMenu activeIndex="#{navigationMB.activeIndex}" > <p:menuitem value="Početna" action="#{navigationMB.navigateStudent('home')}" icon="ui-i

正如标题本身所解释的,我在管理选项卡菜单中当前活动的选项卡时遇到问题。我使用的是JSF2.1W/PF3.4。以下是带有选项卡菜单的代码片段:

<h:form>
    <p:tabMenu activeIndex="#{navigationMB.activeIndex}"  >
        <p:menuitem value="Početna" action="#{navigationMB.navigateStudent('home')}" icon="ui-icon-home" />
        <p:menuitem value="Konsultacije" action="#{navigationMB.navigateStudent('konsultacije')}"  icon="ui-icon-search" />
        <p:menuitem value="Zakazivanje" action="#{navigationMB.navigateStudent('zakazivanje')}"  icon="ui-icon-document"/>
        <p:menuitem value="Profesori" action="#{navigationMB.navigateStudent('profesori')}"/>
        <p:menuitem value="Moj profil" action="#{navigationMB.navigateStudent('profil')}"  icon="ui-icon-person" />
    </p:tabMenu>
</h:form>
@Named(value = "navigationMB")
@RequestScoped
public class NavigationMB {

private int activeIndex = 0;
public NavigationMB() {

}

public String navigateStudent(String page) {

    System.out.println("go to page " + page);

    if ("home".equals(page)) {
        activeIndex = 0;
        return "/student/home?faces-redirect=true";
    }
    if ("konsultacije".equals(page)) {
        activeIndex = 1;
        return "/student/allConsults?faces-redirect=true";
    }
    if ("zakazivanje".equals(page)) {
        activeIndex = 2;
        return "/student/newConsult?faces-redirect=true";
    }
    if ("profesori".equals(page)) {
        activeIndex = 3;
        return "/student/allProfessors?faces-redirect=true";
    }
    if ("profil".equals(page)) {
        activeIndex = 4;
        return "/student/profile?faces-redirect=true";
    }

    return "";
}
这在浏览时运行良好,但当我注销(使会话无效)并稍后与相同或不同的用户返回时,activeIndex会被记住。我不明白这里有什么吗?我假设每次有导航操作时都会创建请求范围的bean,即使用户不在任何地方导航,我设置为0的整数总是指向“home”,但它不会。 任何帮助都会很棒

编辑:

似乎即使不注销,当两个用户(浏览器中的两个选项卡)四处导航时,如果用户1单击选项卡菜单项2,用户2刷新其页面,用户2也会看到选项卡菜单项2被选中,反之亦然


edit2:我在上一次编辑中犯了一个错误,请忘记上面的内容(我没有注意到用户2端的刷新实际上会加载用户1的视图)。

正如在问题的注释中所讨论的,bean没有被识别为请求范围。它是在应用程序启动期间创建的,在应用程序运行期间一直有效

使用Spring时,使用Spring注释将解决此问题:

@Scope("request")
public class NavigationMB {
}
对于请求范围的bean,或:

@Scope("session")
public class NavigationMB {
}

将其设置为会话范围。

清除了浏览器缓存,并在多个浏览器中观察到相同的行为?没有尝试清除缓存,我认为不时清除缓存以使应用程序正常工作并不方便用户:)我在Chrome和IE上尝试过,同样的问题。只是为了澄清,“activeIndex会被记住“意味着当您启动一个新会话时,以前活动的选项卡被启用?@kolossus是的,这就是我的意思。添加两个带有
@PostConstruct
@PreDestroy
注释的调试方法,并在构建和销毁bean时准确地进行调试。在您的请求范围bean中,它们应该紧接着被调用。我几乎认为您的
intactiveindex
是静态的,但似乎不是。