Вызовите действие управляемого компонента JSF с загрузкой страницы

Существует ли способ выполнить действие управляемого компонента JSF, когда страница загружается?

Если это релевантно, я в настоящее время использую JSF 1.2.

57
задан BalusC 31 July 2015 в 11:44
поделиться

1 ответ

JSF 1.0 / 1.1

Просто поместите желаемую логику в конструктор bean-компонента с ограниченным объемом запроса, связанного со страницей JSF.

public Bean() {
    // Do your stuff here.
}

JSF 1.2 / 2.x

Используйте аннотированный метод @PostConstruct в запросе или просмотре bean-компонента с ограниченной областью действия. Он будет выполнен после создания и инициализации / установки всех управляемых свойств и внедренных зависимостей.

@PostConstruct
public void init() {
    // Do your stuff here.
}

Это настоятельно рекомендуется вместо конструктора в случае, если вы используете структуру управления компонентами, которая использует прокси, такие как CDI, потому что конструктор может не вызываться в то время, когда вы этого ожидаете.

JSF 2.0 / 2.1

В качестве альтернативы используйте , если вы собираетесь инициализировать также на основе , или когда компонент помещается в более широкую область видимости, чем область просмотра (что, в свою очередь, указывает на проблему дизайна, но не в стороне). В противном случае @PostConstruct тоже подойдет.

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:event type="preRenderView" listener="#{bean.onload}" />
</f:metadata>
public void onload() { 
    // Do your stuff here.
}

JSF 2.2+

В качестве альтернативы используйте , если вы собираетесь инициализировать также на основе , или когда компонент помещен в более широком масштабе, чем область просмотра (что, в свою очередь, указывает на проблему дизайна, но не в стороне). В противном случае @PostConstruct тоже подойдет.

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
public void onload() { 
    // Do your stuff here.
}

Обратите внимание, что при необходимости может быть возвращен случай навигации String . Это будет интерпретироваться как перенаправление (поэтому здесь не требуется ? Faces-redirect = true ).

public String onload() { 
    // Do your stuff here.
    // ...
    return "some.xhtml";
}

См. Также:

84
ответ дан 24 November 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: