1

作为一个练习,我希望有一个菜单栏在用户登录之前被禁用。当他登录时,我想调用一些会触发更新的东西。菜单栏在master.xhtml模板文件中

<h:form >
  <p:menubar id="masterMenuBar">
  <p:menuitem disabled="#{backing.disableMenu}" value="List users" />
  </p:menubar>
</h:form>

作为登录的一部分,我有代码来刷新表单

public void refreshForm() {
  RequestContext context = RequestContext.getCurrentInstance(); 
  context.update("form1"); 
  context.update("masterMenuBar");
}

我尝试了调用我定义的标签的上下文更新,masterMenuBarRequestContext显然不包括我的调用模板表单(这听起来很合理)。

是否有其他一些我可以调用的上下文,其中包括对我的菜单栏的上下文更新?也许我走错了路,有更好的方法来实现同样的目标吗?

我确实注意到即使调整浏览器的大小也不足以再次调用我的backing.disableMenubean。显然我需要一些相当坚固的东西才能让它第二次到达我的豆子。

4

1 回答 1

2

您需要传递绝对客户端 ID,而不是相对客户端 ID。如果您右键单击并在浏览器中查看源代码,那么您会看到该masterMenuBar元素具有其表单的(自动生成的)ID 作为前缀。

您需要提供菜单位于固定 ID 中的表单

<h:form id="menuForm">
    <p:menubar id="masterMenuBar">
        ...

并改为传递绝对客户端 ID。

context.update("menuForm:masterMenuBar");

更新:对不起,它不应该:update<p:commandButton>.

于 2012-05-20T12:08:52.217 回答