Как смоделировать поведение @postConstruct
в JSF 1.1, как в JSF 1.2 и новее?
На самом деле, я хочу автоматически вызывать метод компонента во время загрузки страницы?
Я использую IceFaces 1.8 на JSF 1.1.
Как смоделировать поведение @postConstruct
в JSF 1.1, как в JSF 1.2 и новее?
На самом деле, я хочу автоматически вызывать метод компонента во время загрузки страницы?
Я использую IceFaces 1.8 на JSF 1.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>
.