将资源注入UIComponent(又称CDI在这里工作吗?)

Ala*_*ect 7 cdi composite-component jsf-2

我正在编写一个需要与我的DAO交互的(复合)组件.以下是声明Java部分的方式:

@FacesComponent(value="selectLocation")
public class SelectLocation extends UINamingContainer {
Run Code Online (Sandbox Code Playgroud)

为了获取DAO对象,我尝试了CDI注释:

    @Inject private LocationControl lc;
Run Code Online (Sandbox Code Playgroud)

这没用,所以我尝试了Faces注释:

    @ManagedProperty (value = "@{locationControl}") private LocationControl lc;
Run Code Online (Sandbox Code Playgroud)

两种情况都没有发生 - 属性lc在构造函数完成后最终为null.

我在所有的后台bean中使用CDI,一切正常.这将使用GlassFish 3.1.1中的Weld.有关如何获取资源的任何建议?

Ala*_*ect 5

我现在有一个解决办法,就是基本上放入CDI等的锅炉板代码.人.应该废除.我现在有这个方法:

public LocationControl getLocationControl() {
    if (lc != null) return lc;
    FacesContext fc = getFacesContext();
    Object obj = fc.getApplication().evaluateExpressionGet(fc, "#{locationControl}", LocationControl.class);
    if (obj instanceof LocationControl) lc = (LocationControl) obj;
    return lc;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人有更好的解决方案.