2011-07-22 17 views
19

Powiedz, że mam klasę Entity, Car.  Różnica między zarządzanym komponentem bean a komponentem bean sesji

@Entity 
public class Car 

Mój IDE pozwala mi automatycznie wygenerować fasoli sesji z klas encji, więc skończyć z CarFacade

@Stateless 
public class CarFacade 

mogę również generować JSF Managed fasolę

@ManagedBean  
@RequestScoped 
public class RegistrationController 

mogę zrozumieć istotną różnicę między klasą Entity i innymi komponentami bean, ale jakie są różnice między bezstanowymi komponentami bean sesji a zarządzanym komponentem bean? Czytam, że bezstanowy komponent bean sesji służy do implementowania logiki biznesowej działającej na encji, a zarządzane komponenty bean służą do interakcji z interfejsem WWW, poprzez wywoływanie metod wywoływania strony na zarządzanym komponencie bean i zarządzanie połączeniem bean zarządzanej. metody biznesowe w komponencie bean sesji.

Tak więc w moim przykładzie kontroler RegistrationController będzie zawierał metodę + register (String carRegistration), do której strona zadzwoniłaby. ControllerController z kolei tworzy egzemplarz Car i wywoła + create (Car car) na komponencie bean sesji, który będzie go utrzymywał.

Czy to prawda?

Odpowiedz

27

Zarządzany komponent bean JSF jest klejem (kontrolerem) między jednostką (modelem), stroną JSF (widok) i komponentem przedsiębiorstwa (usługa biznesowa).

W zasadzie masz rację, rozumiejąc, że strona JSF powinna wywołać metodę działania komponentu zarządzanego, która powinna z kolei przekazać model i działanie dalej do usługi biznesowej i ostatecznie obsłużyć wynik nawigacji w oparciu o wynik zgłoszenia serwisowego.

Ale nie masz absolutnie racji, w jaki sposób model powinien być używany i przekazywany. Zwykle model staje się właściwością zarządzanego komponentu bean, dzięki czemu można go po prostu powiązać z elementami wejściowymi formularza, a następnie przekazać bez zmian do usługi biznesowej.

E.g.

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

z

private Car car; 
private @EJB CarFacade carFacade; 

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

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

// ... 
+0

Doskonałe, że nie straciła gola w górę. Dzięki! – Laurens

+0

Nie ma za co. A jeśli chcesz edytować samochód, zwykle chcesz zrobić coś takiego: 'this.car = carFacade.find (id);' in podczas '@ PostConstruct' lub' ' gdzie 'id' jest parametrem żądania przekazanego. – BalusC

+0

Przyjemne wyjaśnienie +1 – Shahzeb

Powiązane problemy