我正在使用Spring 3和JSF 2创建一个应用程序。我使用自定义ViewScope实现从https://github.com/michail-nikolaev/primefaces-spring-scopes。我注册了自定义作用域。
问题是,当我试图访问使用视图作用域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是会话作用域时,一切都很好。
我很感激你的帮助。看起来您的问题是由生成用于处理@Transactional
注释的基于jdk的代理引起的。
JDK代理仅为类实现的接口创建(在您的示例中为Serializable)
)。因此,您的代理只有来自Serializable
接口的方法(根本没有)。
要解决这个问题,你需要切换到另一个代理模式(使用cglib),例如使用:@EnableTransactionManagement(proxyTargetClass = true)
。同时,将cglib:cglib-nodep:2.2
添加到项目的依赖项中。
这是一个ViewScope问题,它创建了虚拟版本,阅读这里:http://forum.primefaces.org/viewtopic.php?f=3&t=24082