@postConstruct в JSF 1.1

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

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

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


person Moro    schedule 07.07.2011    source источник


Ответы (1)


Смысл @PostConstruct состоит в том, чтобы предоставить хук для выполнения некоторого кода после того, чтобы все управляемые свойства (как в <managed-property> или @ManagedProperty) были установлены и все внедрения зависимостей (например, @EJB, @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>.

person BalusC    schedule 07.07.2011
comment
Спасибо, чувак, но я хотел выполнять метод каждый раз, когда загружается страница. - person Moro; 10.07.2011