我有一个JSF ManagedBean,它有一个应该由Spring设置的属性。但是,我收到以下错误:
Caused by: javax.el.ELException: java.lang.IllegalArgumentException: Cannot convert persistence.AuthDao@2f6e6ad9 of type class $Proxy166 to class persistence.AuthDao
at com.sun.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:68)
at com.sun.faces.el.ELUtils.coerce(ELUtils.java:536)
at com.sun.faces.mgbean.BeanBuilder$Expression.evaluate(BeanBuilder.java:592)
at com.sun.faces.mgbean.ManagedBeanBuilder$BakedBeanProperty.set(ManagedBeanBuilder.java:606)
... 57 more
Caused by: java.lang.IllegalArgumentException: Cannot convert persistence.AuthDao@2f6e6ad9 of type class $Proxy166 to class persistence.AuthDao
at com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:397)
at com.sun.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:66)
我在faces-config.xml中有ELresolver。
<managed-bean>
<managed-bean-name>authController</managed-bean-name>
<managed-bean-class>controllers.AuthController</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>authDao</property-name>
<value>#{authDao}</value>
</managed-property>
</managed-bean>
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
似乎它可以找到类,但是类是另一种类型($ Proxy166?,不知道它来自哪里)。
PS:删除ELResolver似乎可以解决问题;我认为在faces-config.xml中明确提供managed-bean会覆盖ELResolver。那么这两种方式有什么共存的呢?类似地,如果我为bean提供注释和XML配置,其中一个是首选的,或者有没有办法合并它们,那么在注释中提供一些属性,有些属于XML吗?
PPS:添加接口并更改当前类以实现它们后,我收到以下错误:
部署期间出错:加载应用时出现异常: java.lang.IllegalStateException:ContainerBase.addChild:start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException:错误 在ServletContext资源中定义名为'authDao'的bean [/WEB-INF/applicationContext.xml]:bean的初始化失败; 嵌套异常是 org.springframework.beans.ConversionNotSupportedException:失败 转换类型'$ Proxy157实现的属性值 persistence.UserDao,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised” 属性'userDao'所需的类型'persistence.UserDaoImpl'; 嵌套异常是java.lang.IllegalStateException:无法转换 类型的值[$ Proxy157实现 persistence.UserDao,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] 要求属性'userDao'的类型[persistence.UserDaoImpl]:否 找到匹配的编辑器或转换策略。请参阅server.log 了解更多详情。
答案 0 :(得分:7)
这是你班级的代理人。您正在实现一个接口,因此spring在接口周围创建了一个代理,但您尝试按具体类型注入。切换到界面(在托管bean中)。
如果你真的需要某些理由通过具体课程注入,你可以使用@Scoped(proxyMode=ScopeProxyMode.TARGET_CLASS)