gpt4 book ai didi

java - 托管 bean 和 session bean 之间的区别

转载 作者:IT老高 更新时间:2023-10-28 20:52:51 24 4
gpt4 key购买 nike

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

@Entity
public class Car

我的 IDE 允许我从实体类自动生成 session bean,所以我最终得到了一个 CarFacade

@Stateless
public class CarFacade

我也可以生成 JSF Managed beans

@ManagedBean     
@RequestScoped
public class RegistrationController

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

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

这对吗?

最佳答案

JSF 托管 bean 是实体(模型)、JSF 页面( View )和企业 bean(业务服务)之间的粘合剂( Controller )。

所以,是的,您的理解基本上是正确的,JSF 页面应该调用托管 bean 的操作方法,该方法应该将模型和操作进一步委托(delegate)给业务服务,并最终根据结果处理导航结果服务调用。

但是您在模型的使用和传递方式上并不完全正确。通常您将模型作为托管 bean 的属性,这样您就可以将其绑定(bind)到表单的输入元素,最后将其原封不动地传递给业务服务。

例如

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

// ...

关于java - 托管 bean 和 session bean 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com