如何更新调用模板中的菜单栏

时间:2012-05-20 05:52:07

标签: jsf primefaces

作为练习,我希望有一个菜单栏,在用户登录之前一直处于禁用状态。当他登录时我想调用一些会触发更新的内容。菜单栏位于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");
}

我试着通过调用我定义的标签masterMenuBar的上下文更新来运气,但RequestContext显然不包括我的调用模板表单(这听起来很合理)。

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

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

1 个答案:

答案 0 :(得分:2)

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

您需要提供菜单所在的表单以固定ID

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

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

context.update("menuForm:masterMenuBar");

更新:抱歉,它不应以:开头,与update的{​​{1}}属性相反。