2016-06-17 95 views
0

我想根據用戶是否是管理員來限制PrimeFaces選項卡的呈現。bean值更改後的更新頁面

我使用以下EL這樣做:

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

我UserSession類:

@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事後是真的?即在ADMIN角色已被授予用戶的會話之後?

是否有可能'重新加載'頁面,以便它可以在更改後重新提取'isAdmin'屬性?

+0

使用ajax請求調用addRole()並更新您的選項卡。 –

+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

查看更新的答案 –