作为练习,我希望有一个菜单栏,在用户登录之前一直处于禁用状态。当他登录时我想调用一些会触发更新的内容。菜单栏位于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。显然我需要一些相当强大的东西才能让它第二次到达我的豆子。
答案 0 :(得分:2)
您需要传递绝对客户端ID,而不是相对客户端ID。如果您在浏览器中右键单击并查看源代码,那么您将看到masterMenuBar
元素的前缀为其表单的(自动生成的)ID。
您需要提供菜单所在的表单以固定ID
<h:form id="menuForm">
<p:menubar id="masterMenuBar">
...
并改为传递绝对客户端ID。
context.update("menuForm:masterMenuBar");
更新:抱歉,它不应以:
开头,与update
的{{1}}属性相反。