【发布时间】:2023-03-14 08:20:01
【问题描述】:
我试图根据用户是否是管理员来限制 PrimeFaces 选项卡的呈现。
我正在使用以下 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”属性?
【问题讨论】:
-
使用 ajax 请求调用 addRole() 并更新您的选项卡。
-
@ShadyAziz 需要 ajax 请求吗?当然,如果您更新选项卡,它将能够“看到”它已更改?
-
是的。想想这里的校长。您想在后端调用一个函数,然后更新您的 UI 中的某个模块以呈现或不呈现它。我建议您阅读有关它的主要面孔。这是一个简单的例子primefaces.org/showcase/ui/ajax/basic.xhtml
-
我得到的问题是,您想在角色更改为管理员后重新加载页面,当角色 == 管理员更新页面时,如果条件不更新页面,则可能会发生这种情况。在 ajax 中不是强制更新或重新加载页面,您只能在 if 条件下更新页面。
标签: jsf primefaces el