Отдельные экземпляры контроллера для каждого включенного шаблона - PullRequest
0 голосов
/ 19 июня 2019

У меня есть шаблон 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 было бы решением.

Я нарисовал небольшое представление о том, что происходит сейчас, и о том, что я хотел бы получить.

Теперь

enter image description here

Что я ищу

enter image description here

Я думал о пользовательской области действия @IncludeViewScoped. Будет ли это разумно для моего сценария?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...