带ParameterizedType的CDI JSF Managed Bean

时间:2014-07-24 18:38:13

标签: jsf generics java-ee-6 cdi

我创建了一个base托管bean,它接收ParameterizedType
我的托管bean使用CDI(@Named而不是@ManagedBean)。

  • 如果我使用默认范围,则以下代码有效。
  • 如果我使用范围@ViewScoped(javax.faces。*或omnifaces1.8.1),则会发生以下异常:
      

    java.lang.Class与java.lang.reflect.ParameterizedType java.lang.ClassCastException不兼容

  • 如果我将@ManagedBean与默认范围(或@ViewScoped)一起使用,则会发生同样的异常。

我的环境:

IBM Websphere 8.5.5.2
JSF 2.0 (Apache MyFaces) + omnifaces 1.8.1
CDI (Apache OpenWebBeans)

有没有人遇到过这个问题?
有解决方案吗?

public abstract class BaseMB<T> {
    private Class<T> myClass;
    public BaseMB() {
        this.myClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}


@Named
@ViewScoped
public class MyMB extends BaseMB<MyClass> {
}

P.S。我在持久层中使用相同的策略,一切正常。

public abstract class BaseDAO<T> {
    private Class<T> myEntity;
    public BaseDAO() {
        this.myEntity = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}

public class MyEntityDAO extends BaseDAO<MyEntity> {
}

0 个答案:

没有答案