Spring JSF 2查看范围$ Proxy115没有属性

时间:2013-03-17 23:51:24

标签: spring jsf scope view-scope

我正在使用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是会话作用域时,一切正常。

我将非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

看起来您的问题是由基于JDK的代理引起的,以处理@Transactional注释。

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

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

答案 1 :(得分:0)

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