Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Springbean注入JSF ManagedBean时出错_Spring_Jsf_Jakarta Ee - Fatal编程技术网

将Springbean注入JSF ManagedBean时出错

将Springbean注入JSF ManagedBean时出错,spring,jsf,jakarta-ee,Spring,Jsf,Jakarta Ee,我有一个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.ExpressionFactoryIm

我有一个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>

授权控制器
controllers.AuthController
一场
authDao
#{authDao}
org.springframework.web.jsf.el.SpringBeanFacesELResolver
它似乎可以找到该类,但该类属于另一种类型($Proxy166?,不确定其来源)

PS:移除ELResolver似乎可以达到目的;我认为在faces-config.xml中显式提供托管bean会覆盖ELResolver。那么,有没有办法让这两者共存呢?类似地,如果我同时为bean提供注释和XML配置,哪一个是首选的,或者有没有方法合并它们,那么在注释中提供一些属性,在XML中提供一些属性

PPS:添加接口并更改当前类以实现它们后,我出现以下错误:

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)
部署期间出错:加载应用程序时出现异常: 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 更多细节


这是您的类的代理。您正在实现一个接口,因此spring围绕接口创建了一个代理,但您正在尝试按具体类型进行注入。改为切换到接口(在托管bean中)


如果出于某种原因确实需要通过具体类进行注入,则可以使用
@Scoped(proxyMode=ScopeProxyMode.TARGET_class)

实际上,在本例中我没有实现接口,这是一个快速演示。那么,Spring是否强制我在默认情况下使用接口呢?不。但是您的bean肯定有一个接口,否则您将无法获得$ProxyXX。如果没有接口,它将使用cglib。谢谢您的帮助。不过,我的项目中没有接口,只有类。添加接口也不能解决问题,我已经添加了上面的错误消息。给我看看AuthDao类定义。非常感谢,添加接口后,问题似乎消失了。我有一些UserDaoImpl引用,而不是UserDao,这就是最新错误的原因。我仍然不确定最初的问题是什么,但似乎为所有问题创建接口以某种方式解决了它。