@Named与@Model - CDI vs /和ManagedBean

时间:2014-04-26 09:01:43

标签: jsf-2 cdi managed-bean

我想知道这篇文章解释了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]:在什么情况下你还想保留那个额外的控制器层?

感谢

3 个答案:

答案 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,这显然不是一个好的做法。