Используйте много бобов из одного класса, разных областей - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу использовать класс ManagedBean, Users.java, для создания 2 экземпляров бинов с разными областями действия.Я пытался сделать это двумя способами:

1.Используйте аннотации ManagedBean и SessionScope для пользователей (это создает «пользователей» с областью действия сеанса) и объявите в Face-config.xml другой объект MenagedBean от пользователя с областью запроса.

@ManagedBean
@Component
@SessionScoped
public class Users implements Serializable {...} 

Примечание: «Компонент"Это из среды Spring, это может быть проигнорировано на данный момент.

В Face-config.xml:

<managed-bean>
    <managed-bean-name>newUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

На странице входа я использую" # {users.} "внутри.В этом случае логин работает нормально (сделано с помощью Spring Security).Я также создал страницу «Зарегистрироваться», и там мне нужен компонент «Пользователи» с областью запроса для создания нового пользователя в базе данных, «# {newUser.}».Я помещаю точку останова в метод, и когда приложение останавливается там, все атрибуты этого объекта равны нулю, и приложение выдает исключение NullPointerException.

2.Удалите аннотации «ManagedBean» и «SessionsScoped» из Users.java и объявите 2 управляемых bean-компонента в face-config.xml:

<managed-bean>
    <managed-bean-name>currentUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
    <managed-bean-name>newUser</managed-bean-name>
    <managed-bean-class>ro.telacad.model.Users</managed-bean-class>   
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Конечно, на этот раз я использую на странице входа и на странице приветствия"#{текущий пользователь.}".На этот раз исключение NullPointerException выдается в обоих случаях (вход в систему и регистрация).

Загружен файл face-config.xml.Я протестировал это, создав класс TempBean.java с 1 атрибутом и 1 методом, объявив управляемый bean-компонент этого класса в face-config.xml и используя его в форме ah :.Это сработало.

1 Ответ

0 голосов
/ 24 сентября 2019

Я расширил класс «Пользователи», как сказал Селарон в комментарии.Работает нормально.Но я думаю, что это не очень хорошая идея делать это в реальном приложении, но на данный момент у меня нет лучшей идеи.

...