2013-03-21 28 views
-1

由於標題自身解釋,我在管理標籤菜單中當前活動選項卡時遇到問題。我正在使用JSF 2.1 w/PF 3.4。下面是代碼片段與標籤菜單:在註銷時記住的Primefaces TabMenu活動標籤

<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> 

這裏是支持bean,其用於導航該選項卡菜單的唯一目的的代碼:

@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與他的看法)。

+0

清除瀏覽器緩存,並在多個瀏覽器中觀察到相同的行爲? – kolossus 2013-03-21 12:12:50

+0

還沒有嘗試清除緩存,我不認爲它是用戶友好的清理緩存每隔一段時間,然後爲應用程序正常工作:)我試過它在Chrome和IE瀏覽器,同樣的問題。 – BorkoS 2013-03-21 12:18:48

+0

需要說明的是,「activeIndex被記住」意味着當你啓動一個新的會話時,之前的活動標籤被啓用了嗎? – kolossus 2013-03-21 12:24:44

回答

0

正如問題的評論中所討論的那樣,bean不被認爲是請求作用域。它是在應用程序啓動過程中創建的,並且只要應用程序正在運行就會生效

在Spring使用,使用Spring註解會解決此問題:

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

對於請求範圍豆,或者:

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

,使其會話範圍。