2016-06-17 94 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

查看更新的答案 –