我想知道这篇文章解释了JSF对EJB的直接访问:http://www.mastertheboss.com/cdi/context-dependency-injection-with-jboss-weld
我明白,使用CDI,您可以注入并访问每个bean类型,包括来自层层远端的实体bean。
然而
[问题1]:我应该丢弃@Model控制器并仅将@Named应用于所有类吗?这种放弃了使用JSF的方法 - > ManagedBean - > EJB - > EntityBean到JSF - > EJB - > EntityBean的。我只是觉得这个额外的ManagedBean正在给我一个额外的层而没有太大的好处。
[问题2]:在什么情况下你还想保留那个额外的控制器层?
感谢
答案 0 :(得分:4)
我不认为有一个普遍的答案。这取决于您的控制器,两者都是有效的建筑。
关键是您的控制器是否需要容器提供的服务。
例如,如果您的控制器应该在事务外执行,那么证明额外的层是合理的。
然而,如果可以的话,总是倾向于简单。如果你的应用程序很简单,只有三层,那就不要复杂了。
就@Model取代@Named而言,@ Model只是@RequestScoped @Named bean的快捷方式。如果您希望bean具有其他范围,则仅替换@Node的@Model。
答案 1 :(得分:2)
从整个平台中获得最大收益的最佳方法是使用CDI作为控制器层(接收来自基于JSF的前端的请求),并在内部委托给EJB或其他CDI bean以用于业务逻辑。我不会使用JSF ManagedBeans,因为Java EE 7中不推荐这个概念,而是支持CDI编程模型。
控制器可用于始终转换数据类型,分离出前端和后端模型。
答案 2 :(得分:1)
我认为等式应该是:
JSF = View (.xhtml) + Controller (ManagedBean)
EJB = Model
除非您将整个后端逻辑放在View
内,否则不会直接从Model
转到ManagedBean
,这显然不是一个好的做法。