Разница между управляемым компонентом и сессионным компонентом - PullRequest
20 голосов
/ 22 июля 2011

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

@Entity
public class Car

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

@Stateless
public class CarFacade

Я также могу генерировать JSF Managed beans

@ManagedBean     
@RequestScoped
public class RegistrationController

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

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

Это правильно?

1 Ответ

27 голосов
/ 22 июля 2011

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

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

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

1007 * Е.Г. *

<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";
}

// ...
...