环境:
我想在ViewScope bean中加载在@PostConstruct方法中生成的菜单,但是在加载网页时,该菜单无效。
页面persona.xhtml是从另一个网站的重定向加载的,作用域似乎是RequestScope而不是ViewScope,因为执行了@PostConstruct(init()),但是直到我重新执行@PostConstruct(init( ))方法
已加载特定的bean CustomMenuBean(视图范围),但Web页面中的CustomMenuBean.menu为空,但它在bean中具有菜单(当我在调试模式下停下来时,正确加载了CustomMenuBean.menu)。
因此,我尝试使用按钮来更新frmMenus以进行测试,并且在使用以下代码刷新网页后,它可以正常工作。
<p:commandButton value="update" action="#{personaBean.doNothing}" process=":frmMenus" update=":frmMenus"/>
网页persona.xhtml
...
<h:form id="frmMenus">
<div class="layout-menu-container #{usuariPreferenciesBean.menuClass}">
<div class="nano">
<div class="nano-content menu-scroll-content">
<ui:include src="menu_profile.xhtml"/>
<pu:menu id="mnu_custom" widgetVar="mnu_custom" model="#{customMenuBean.menu}"/>
<p:separator/>
</div>
</div>
</div>
</h:form>
<h:form id="frmPersona">
<!-- person data -->
</h:form>
...
PersonaBean.java
@ViewScoped
@ManagedBean
public class PersonaBean...
...
@ManagedProperty(value = "#{customMenuBean}")
private CustomMenuBean cstmMenuBean; //View scope Bean to store menu
@PostConstruct
public void init() {
super.init(Persona.class);
super.setService(service);
cstmMenuBean.generateMenu(); //create a DefaultMenuModel()
}
...
我不知道我在想什么。
此错误似乎是一种错误,我没有找到解释。
我只是通过@PostConstruct托管bean中的javascript执行隐藏的按钮。
不是这样,但是它解决了此补丁程序的问题。
PersonaBean.java
PrimeFaces.current().executeScript("document.getElementById(\"frmPersona:btnUpdate\").click()");
persona.xhtml
<p:commandButton id="btnUpdate" value="update" action="#{personaBean.doNothing}" process=":frmMenus" update=":frmMenus" style="display:none"/>