我创建了一个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> {
}