关于为复合组件支持bean的基本问题

时间:2011-08-22 16:08:33

标签: jsf jsf-2 cdi composite-component

我找不到关于这个问题的任何指导。我正在编写一个需要自己的支持bean的复合组件,因为它与数据库交互。

新组件还需要能够在某些其他支持bean中设置一些用户操作的结果。

要做到这一点,问题是我是否必须编写@FacesComponent java类或常规@ Model / @ Named(我使用CDI注释)类型的bean?如果你可以使用其中之一,那么一个或另一个的优势是什么?

次要问题:我是否可以将CDI @Inject用于@FacesComponent以获取我的DAO等?

更新:我发现我可以在常规支持bean中使用以下代码访问cc.attr对象:

  FacesContext fc = FacesContext.getCurrentInstance();
  Object obj = fc.getApplication().evaluateExpressionGet(fc, 
            "#{cc.attrs.model.location}", Location.class);

所以这允许我获得属性。我还没有发现我怎么写它们。

所以看起来做@FacesComponent的唯一真正原因是你想要编写渲染代码,输出正常的Facelets标签不会渲染的东西。这是对的吗?

1 个答案:

答案 0 :(得分:1)

我认为BalusC在this thread中回答了这个基本问题。

主要优点是@FacesComponent能够访问UIComponent通常可以访问的属性,而不是试图与bean中执行的EL表达式相关联。