@postConstruct в JSF 1.1 - PullRequest
       36

@postConstruct в JSF 1.1

1 голос
/ 07 июля 2011

Как мне имитировать поведение @postConstruct в JSF 1.1, как в JSF 1.2 и новее?

На самом деле, я хочу автоматически вызывать метод bean-компонента во время загрузки страницы?

IЯ использую IceFaces 1.8 на JSF 1.1.

1 Ответ

2 голосов
/ 07 июля 2011

Смысл @PostConstruct состоит в том, чтобы обеспечить ловушку для выполнения некоторого кода после того, как установлены все управляемые свойства (как в <managed-property> или @ManagedProperty), и все внедрения зависимостей (например, * 1006)*, @Resource, @Inject и т. Д.).

Если у вас их нет, просто используйте конструктор бина.

public class Bean {

    public Bean() {
        // Just do your job here. Don't do it the hard way.
    }

    // ...
}

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

public class Bean {

    private SomeObject someManagedProperty;

    public void setSomeManagedProperty(someManagedProperty) {
        if (this.someManagedProperty == null && someManagedProperty != null) {
            // First-time set, now you can do your job here.
        }

        this.someManagedProperty = someManagedProperty;
    }

    // ...
}

Обновить каксогласно комментариям:

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

@PostConstruct этого не делает.Однако, если bean-компонент находится в области запроса, вы увидите тот же эффект.Похоже, вы используете управляемый bean-объект области действия для сеанса или приложения для управления данными области запроса.Это по сути неправильно.Вы должны преобразовать его в bean-объект области видимости запроса.Любые реальные данные сессий области могут быть разделены на сессионный компонент, который вы затем вводите с помощью <managed-property>.

...