Доступ к одному управляемому бину из другого - PullRequest
1 голос
/ 26 августа 2011

У меня есть простая страница авторизации, которая позволяет пользователю вводить логин и пароль. Основываясь на результатах пользовательского ввода, я определяю следующую страницу для отображения. У меня есть таблица в БД, которая содержит идентификатор, логин и пароль пользователя и роль пользователя, поэтому следующая страница будет определена на основе информации, которая будет извлечена из поля роли записи, которая соответствует введенному логину и паролю. Но у меня также есть таблица в db, которая содержит всю информацию о пользователе (около 10 полей) одного типа пользователей и другую таблицу, которая содержит информацию о другом типе пользователей (4 поля). Так что моя БД имеет такую ​​структуру:

Table 1:
  id
  login
  pass
  role

Table 2:
  id(reference to id of table 1)
  other fields....

Table 3:
  id(reference to id of table 1)
  other info....

Я думаю, что мое приложение должно иметь управляемый компонент (requestScope) для авторизации, который будет принимать логин и пароль. Этот компонент будет иметь контроллер действий для отправки формы авторизации. В этом контроллере действий я должен определить роль пользователя и на основе этой информации создать управляемый bean-объект в рамках сеанса для конкретного типа пользователя (приложение будет иметь отдельный управляемый bean-компонент для разных типов пользователей). Также у меня есть в этом контроллере действий, чтобы передать конкретную информацию для установки сессионного компонента для пользователя (идентификатор пользователя). Но можно ли просто установить управляемый компонент области действия сеанса (с помощью оператора new) в методе действия управляемого компонента управления областью запроса? Также, как я могу использовать методы одного сессионного bean-объекта в другом сессионном bean-объекте (предположим, что я создаю 2 управляемых bean-объекта сессионной области, которые отвечают за различные сервисы, как я могу вызвать метод одного в другом). Может быть, описанный метод не подходит для такой проблемы? Если да, можете ли вы дать совет для лучшего подхода к дизайну?

1 Ответ

3 голосов
/ 26 августа 2011

Доступ к одному управляемому бину из другого

Чтобы ответить на этот вопрос напрямую, вы обычно используете @ManagedProperty для внедрения одного управляемого бина вдругой управляемый боб.Да, он будет автоматически создавать bean-компоненты, но это должно быть особенно дешево.


Но можно ли просто установить управляемый bean-объект области действия сеанса (с помощью нового оператора) вМетод действия управляемого объекта EJB?

Да, это возможно.Просто сохраните его в ExternalContext#getSessionMap() с именем управляемого компонента в качестве ключа.

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.getSessionMap().put("bean", new Bean());

Он будет доступен в #{bean} и так далее.Хороший ли это подход - это второе.


Что касается вашего конкретного функционального требования.Я думаю, что гораздо лучше иметь только один управляемый bean-объект сессий с требуемыми данными в качестве свойств.Затем вы можете, например, просто проверить, не является ли свойство User не null, чтобы определить, вошел ли пользователь в систему. Вы можете найти пример компонента в этом ответе: Программно контролировать вход в систему с помощью Servlet 3.0 .

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