Среда:
- Jboss 5.2
- Java 7
- JSF 2.1.2
- Primefaces 6.2
- Мохарра (1.2_13-b01-FCS)
Я хочу загрузить меню, сгенерированное в методе @PostConstruct в компоненте ViewScope, но при загрузке веб-страницы меню становится недействительным.
Страница persona.x html загружается с перенаправления с другой веб-страницы, и PersonaBean имеет ViewScope. PersonaBean init () @PostConstruct выполняется, но на веб-странице не загружаются значения.
Специфический c bean-компонент CustomMenuBean (область просмотра) загружен, но CustomMenuBean.menu на веб-странице имеет значение null, но имеет меню в bean-компоненте (когда я останавливаюсь в режиме отладки, CustomMenuBean.menu правильно загружается).
Поэтому я попытался обновить frmMenus с помощью кнопки для целей тестирования, и она хорошо работает после обновления веб-страницы sh со следующим кодом.
<p:commandButton value="update" action="#{personaBean.doNothing}" process=":frmMenus" update=":frmMenus"/>
Веб-страница persones.x html
...
<p:dataTable id="lstPersones" var="item" value="#{personesBean.items}"...>
<p:ajax event="rowSelect" listener="#{personesBean.onRowSelect}"/>
...
PersonesBean. java
@ViewScoped
@ManagedBean
public class PersonesBean ...
...
@Override
public void onRowSelect(SelectEvent event) {
...
HttpServletRequest origRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String ctxPath = origRequest.getContextPath();
FacesContext.getCurrentInstance().getExternalContext().redirect(ctxPath + "\gestio\persona.xhtml");
...
Веб-страница persona.x html
...
<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()
}
...
I не знаю, чего мне не хватает.