一尘不染

托管bean和会话bean之间的区别

java

假设我有一个实体类,汽车。

@Entity
public class Car

我的IDE使我可以从实体类自动生成会话bean,因此最终得到了CarFacade

@Stateless
public class CarFacade

我也可以生成JSF托管bean

@ManagedBean     
@RequestScoped
public class RegistrationController

我可以理解Entity类和其他Bean之间的有意义的区别,但是无状态会话Bean和托管Bean之间有什么区别?我读到无状态会话Bean用于实现在实体上运行的业务逻辑,而托管Bean用于通过在托管Bean上使用网页调用方法并进行托管Bean调用来与基于Web的前端进行交互。会话Bean上的业务方法。

因此,在我的示例中,RegistrationController将具有网页将调用的+ register(String
carRegistration)方法。RegistrationController会依次实例化Car并在会话bean上调用+ create(Car
car),它将保留它。

这样对吗?


阅读 225

收藏
2020-12-03

共1个答案

一尘不染

JSF受管Bean是实体(模型),JSF页面(视图)和企业Bean(业务服务)之间的粘合剂(控制器)。

因此,是的,您基本上理解正确,JSF页面应该调用托管bean的action方法,该方法进而将模型和操作委托给业务服务,并最终根据服务结果处理导航结果。呼叫。

但是在如何使用和传递模型方面您并不完全正确。通常,您将模型设为托管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";
}

// ...
2020-12-03