2016-06-17 15 views
0

ユーザーが管理者であるかどうかによって、PrimeFacesタブのレンダリングを制限しようとしています。Beanの値が変更された後のページの更新

<p:tab title="Admin" rendered="#{userSession.isAdmin}"> 

マイUserSessionクラス:

私はそうするために、次のELを使用しています

@ManagedBean(name="userSession") 
@SessionScoped 

public class UserSession { 
    . 
    . 
    . 
    public boolean isAdmin; 

    public UserSession() { 
     isAdmin = false; 
    } 

    public void addRole(String role) { 
     if (role.equals("ADMIN") { 
      this.isAdmin = true; 
     } 

     role.add(role) 
    } 
} 

addRole()メソッドが呼び出されるのと役割 "ADMIN" を追加します。私はこれが良いことではないことを知っていますが、私はその時点でテスト目的でしか使用していません。

私の問題は、isAdminがコンストラクタでfalseとして認識されるため、タブがレンダリングされていないことです。コンストラクタをtrueに変更すると、レンダリングされます。

isAdminは後でtrueになるようにするにはどうすればよいですか?すなわち、ADMINロールがユーザのセッションに与えられた後?

変更後に 'isAdmin'プロパティを再取得できるようにページを再読み込みすることはできますか?

+0

addRole()をajaxリクエストで呼び出し、タブを更新します。 –

+0

@ ShadyAzizはAjaxリクエストですか?確かに、あなたがタブを更新すれば、それが変更されたことを '見る'ことができるでしょうか? – James

+0

はい、そうです。ここのプリンシパルについて考えてみましょう。あなたは、バックエンドで関数を呼び出して、それをレンダリングするかどうかをUIの特定のモジュールを更新したいとします。 私はそれについてプライムフェイスで読むことをお勧めします。ここには簡単な例があります http://www.primefaces.org/showcase/ui/ajax/basic.xhtml –

答えて

0

ManagedBeanメソッドでRequestContextを使用してPrimefacesコンポーネントを更新できます。たとえば、あなたの場合はUserSession.addRole(...)メソッドです。

RequestContext.getCurrentInstance().update("ID_OF_YOUR_TABVIEW") 
+0

ありがとう、これは私が探しているようだが、まだ期待しているように働いていない。それをManagedBeanで使っているのはどういう意味ですか? – James

+0

更新された回答を見る –

関連する問題