我正在编写一个(复合)组件,该组件需要与我的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;
}
我想知道是否有人有更好的解决方案。