У меня есть шаблон panel.xhtml
, который включает себя n
раза (n
будет известно только во время выполнения).
panel.xhtml
...
<c:when test="#{condition}">
<!-- include other panels -->
<ui:include src="panel.xhtml">
<ui:param name="panel" value="#{otherPanel}"/>
</ui:include>
</c:when>
</c:otherwise>
<!-- render the content of the panel -->
<c:otherwise>
...
Для каждого panel.xhtml
Я хочу иметь новый экземпляр класса контроллера PanelController
.
PanelController.java
@ViewScoped
@ManagedBean(name = "panelCtrl", eager = true)
public final class PanelController {
private Panel panel;
@PostConstruct
public void initialise(Panel panel)
{
panel = (Panel) ((FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY)).getAttribute("panel");
}
}
с введенным ui:param
(или полученным методом PostConstruct
- как сейчас).
Проблема в том, что в моем контроллере только один экземпляр, а this.panel
всегда является параметром последнего включенного шаблона. Я понимаю, что контроллер является областью видимости и создается один раз за запрос (грубо говоря). Если бы была такая вещь, @IncludeScoped
было бы решением.
Я нарисовал небольшое представление о том, что происходит сейчас, и о том, что я хотел бы получить.
Теперь
Что я ищу
Я думал о пользовательской области действия @IncludeViewScoped
. Будет ли это разумно для моего сценария?