Как получить доступ к дочерним компонентам во время метода @PostConstruct? - PullRequest
0 голосов
/ 28 декабря 2011

Я хочу обработать все <p:panel> компоненты внутри <h:panelGroup> в компоненте поддержки.Я связал <h:panelGroup> с бэк-свойством.Но во время метода @PostConstruct свойство равно null.Во время установки свойства setPanel() компонент не имеет дочерних элементов.Если я отправлю что-нибудь, используя кнопку, я смогу получить детей панели.

Что мне нужно сделать, чтобы получить дочерние компоненты компонента во время метода @PostConstruct?

Просмотр:

<h:panelGroup binding="#{wiz.panel}">
    <p:panel header="one">
        <h:outputText value="primeiro" />
    </p:panel>

    <p:panel header="two">
        <h:outputText value="segundo" />
        <h:inputText />
    </p:panel>

    <p:panel header="three">
        <h:outputText value="terceiro" />
    </p:panel>

    <p:panel header="four">
        <h:outputText value="quarto" />
    </p:panel>
</h:panelGroup>

Бэк-бин

@PostConstruct
public void init() {
    if (getPanel() != null) {
        for (UIComponent comp : getPanel().getChildren()) {
            if (comp instanceof Panel) {
                System.out.println(((Panel) comp).getHeader());
            }
            System.out.println("not a panel child");
        }
    } else {
        System.out.println("panel is null");
    }
}

1 Ответ

0 голосов
/ 28 декабря 2011

Это невозможно. @PostConstruct может быть вызван задолго до того, как дерево компонентов будет завершено. Скорее зацепите событие preRenderView. На этом этапе вид гарантированно будет построен. Вы можете прикрепить метод прослушивателя событий с помощью <f:event> в представлении следующим образом:

<f:event type="preRenderView" listener="#{bean.init}" />

Не забудьте удалить аннотацию @PostConstruct из метода init() или переименовать / разделить метод при необходимости.

Нет нужды говорить, что такой подход подозрительный. Я предлагаю переосмыслить ваш подход и при необходимости задать новый вопрос, в котором вы подробно изложите функциональные требования. Возможно, окончательный ответ будет просто использовать простой EL и / или атрибут rendered.

...