由於標題自身解釋,我在管理標籤菜單中當前活動選項卡時遇到問題。我正在使用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與他的看法)。
清除瀏覽器緩存,並在多個瀏覽器中觀察到相同的行爲? – kolossus 2013-03-21 12:12:50
還沒有嘗試清除緩存,我不認爲它是用戶友好的清理緩存每隔一段時間,然後爲應用程序正常工作:)我試過它在Chrome和IE瀏覽器,同樣的問題。 – BorkoS 2013-03-21 12:18:48
需要說明的是,「activeIndex被記住」意味着當你啓動一個新的會話時,之前的活動標籤被啓用了嗎? – kolossus 2013-03-21 12:24:44