1

我正在使用 Spring 3 和 JSF 2 创建一个应用程序。我使用了来自https://github.com/michail-nikolaev/primefaces-spring-scopes的自定义 ViewScope 实现。我注册了自定义范围。

问题是,当我尝试访问使用视图范围 bean 的页面时,出现以下异常:

INFO - ViewScope - Creating bean {editUser}
INFO - EditUser - EditUser() - class[com.myapp.beans.EditUser@f0ac4], rewId[null]
INFO - ViewScope - registerDestructionCallback for bean editUser
INFO - ViewScope - Session event bound sessionBindingListener
INFO - ViewScope - Bean created {com.myapp.beans.EditUser@f0ac4}
2013-03-18 00:30:30 com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /editUser.xhtml @10,78 value="#{editUser.rewId}": The class '$Proxy115' does not have the property 'rewId'.
javax.el.PropertyNotFoundException: /editUser.xhtml @10,78 value="#{editUser.rewId}": The class '$Proxy115' does not have the property 'rewId'.

当 bean 是会话范围时,一切正常。

我会很感激你的帮助。

4

2 回答 2

0

看起来您的问题是由为处理@Transactional注释而生成的基于 JDK 的代理引起的。

JDK代理仅针对类实现的接口创建(在您的情况下Serializable)。因此,您的代理仅具有来自Serializable接口的方法(根本没有)。

要解决此问题,您需要切换到另一种代理模式(使用 cglib),例如使用: @EnableTransactionManagement(proxyTargetClass = true). 另外,添加cglib:cglib-nodep:2.2到项目的依赖项。

于 2013-03-18T05:53:31.437 回答
0

这是一个 ViewScope 问题,它会创建虚拟版本,请在此处阅读:http: //forum.primefaces.org/viewtopic.php? f=3&t=24082

于 2013-07-02T13:37:59.673 回答