【问题标题】:Update page after bean value has changedbean 值更改后更新页面
【发布时间】: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


【解决方案1】:

您可以在 ManagedBean 方法中使用 RequestContext 更新任何 Primefaces 组件。例如,在您的情况下,UserSession.addRole(...) 方法。

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

【讨论】:

  • 谢谢,这似乎是我正在寻找的,但仍然没有像我期望的那样工作。在 ManagedBean 上使用它到底是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2016-08-19
  • 2018-11-09
  • 2023-03-11
  • 2022-01-08
  • 1970-01-01
  • 2018-08-30
相关资源
最近更新 更多