我正在编写一个(复合)组件,该组件需要与我的DAO进行交互。这是声明Java部分的方式:

@FacesComponent(value="selectLocation")
public class SelectLocation extends UINamingContainer {


为了获得DAO对象,我尝试了CDI批注:

    @Inject private LocationControl lc;


那没有用,所以我尝试了Faces批注:

    @ManagedProperty (value = "@{locationControl}") private LocationControl lc;


两种情况都没有发生-构造函数完成后,属性lc最终以null结束。

我在所有支持bean中都使用CDI,并且一切正常。这将在GlassFish 3.1.1中使用Weld。关于如何获取资源的任何建议?

最佳答案

我现在有一个解决方法,它基本上是放在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;
}


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

10-01 14:28