タイトル自体が説明しているように、タブ メニューで現在アクティブなタブの管理に問題があります。私はPF 3.4でJSF 2.1を使用しています。タブ メニューを含むコード フラグメントを次に示します。
<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 に設定した整数は常に「ホーム」を指すと思いますが、そうではありません。どんな助けでも素晴らしいでしょう。
編集:
ログアウトしなくても、2 人のユーザー (ブラウザーの 2 つのタブ) が移動しているときに、ユーザー 1 がたとえばタブ メニュー項目 2 をクリックし、ユーザー 2 がページを更新すると、ユーザー 2 にはタブ メニュー項目 2 が選択されているように見えます。同様に、逆もまた同様です。
edit2: 前の編集で間違いを犯しました。上記のことは忘れてください (ユーザー 2 側で更新すると、実際にはユーザー 1 にビューが読み込まれることに気づきませんでした)。