Подтвердить что ты не робот

Разница между управляемым bean и сеансом bean

Скажем, у меня есть класс Entity, Car.  

@Entity
public class Car

Моя IDE позволяет мне автоматически генерировать сеанс beans из классов сущностей, поэтому я получаю CarFacade

@Stateless
public class CarFacade

Я также могу создать управляемый JSF beans

@ManagedBean     
@RequestScoped
public class RegistrationController

Я могу понять значимую разницу между классом Entity и другим beans, но каковы различия между сеансом без состояния bean и управляемым bean? Я прочитал, что сеанс без учета состояния bean предназначен для реализации вашей бизнес-логики, которая работает с объектами, а управляемые beans предназначены для взаимодействия с веб-интерфейсом, путем использования методов вызова веб-страницы в управляемом bean и имеющие управляемые бизнес-методы вызова bean в сеансе bean.

Итак, в моем примере, RegistrationController будет использовать метод + register (String carRegistration), который будет вызывать веб-страница. Регистрирующий контроллер, в свою очередь, создаст экземпляр автомобиля и вызовет + создать (автомобиль) на сеансе bean, который сохранит его.

Правильно ли это?

4b9b3361

Ответ 1

Управляемый JSF bean - это клей (контроллер) между сущностью (моделью), страницей JSF (представление) и корпоративным bean (бизнес-службой).

Итак, да, вы в основном правы в своем понимании, что на странице JSF должен вызываться управляемый метод действия bean, который должен, в свою очередь, делегировать модель и действие дальше бизнес-службе и в конечном итоге обрабатывать результаты навигации на основе результат вызова службы.

Но вы не совсем правы в том, как модель должна использоваться и передаваться. Обычно вы делаете модель свойством управляемого bean, чтобы вы могли просто привязать ее к элементам ввода формы и, наконец, передать ее без изменений в бизнес-службу.

например.

<h:inputText value="#{registrationController.car.make}" />
<h:inputText value="#{registrationController.car.model}" />
<h:inputText value="#{registrationController.car.year}" />
<h:commandButton value="Save" action="#{registrationController.save}" />

с

private Car car;
private @EJB CarFacade carFacade;

public RegistrationController() {
    this.car = new Car();
}

public String save() {
    carFacade.create(car);
    return "someoutcome";
}

// ...