Используя JSF 2.0 и Spring, я использую управляемый bean-компонент @RequestScope
. Этот компонент хранит информацию о зарегистрированном пользователе. Он загружает пользователя из БД в методе @PostConstruct
:Жизненный цикл JSF - Выполнять метод управляемого bean-компонента после запроса
@PostConstruct
public void init() {
String username = login.getUsername();
user = userDao.load(username);
}
Вошедший в пользователь может вызвать на действие на странице, которая обновляет пользователя в базе данных (с использованием другого управляемого компонента).
Однако фаза @RequestScope
сконструирована в начале запроса, который составляет до вызов действия по обновлению. В результате, когда страница перерисовывается, переменная User
по-прежнему имеет свои старые значения.
Мой вопрос: есть ли способ запустить мой метод загрузки не в начале запроса, а после запрос был отправлен? Или я имею дело с этим неправильно?
Спасибо за ваше понимание,
Себастьен
На самом деле то, что кажется, состоит в том, что компонент запроса создан, затем вызывается другой управляемый bean-компонент и добавляется _another_ Request bean. Затем я изменяю и устанавливаю новое значение моего Пользователя, но это не повлияет на мой первоначальный объект запроса. Есть ли способ передать исходный объект запроса другому компоненту менеджера или получить его? –
Прежде всего: что именно является причиной того, что вы поместили вошедшего в систему пользователя в бланке с запросом? Зачем вам нужно сохранить этот компонент в последующих запросах? Я представил себе, что «логин», как в вашем примере кода, является фактически обработанным сеансом, и таким образом вы гарантируете, что «Пользователь» содержит свежие данные по каждому запросу. Если это не так, то «Пользователь» определенно должен быть компонентом, связанным с сеансом. – BalusC
Действительно. Я храню имя пользователя в компоненте с узлом сеанса и привязываю «пользователь» к запросу, чтобы регулярно обновлять данные. Моя проблема здесь, похоже, в том, что в моем другом управляемом компоненте «пользователь», который я получаю (например, из БД) и модификация, не будет распространяться на компонент с запросом (который уже был сконструирован, когда запрос был запущен, _before_ вызов другого управляемого компонента, который делает некоторую логику на нем) –