假设我有一个实体类,汽车。
@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),它将保留它。
这样对吗?
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"; } // ...