今天我遇到了这个问题,这真的让我感到困扰,因为几乎代码已经运行了(并且即使在恢复到旧版本之后也停止了工作)。
我在Facelets-Page上访问Spring-Bean。 Spring在Proxies中包装这些对象以使用方面和其他一些东西。
问题是,我在尝试访问bean的属性时遇到异常。例外是这样的:
javax.el.PropertyNotFoundException: /customers.xhtml @23,27 value="#{customerBean.customer}": Property 'customer' not found on type $Proxy88
我肯定知道(!!)有相应的getter / setter方法。 到目前为止我尝试过的事情:
无论我做什么,这个类在某种程度上都没有正确包装或者没有被类加载器正确加载。
有人知道可能会导致这样的问题吗?我不知道该怎么做,所以非常感谢任何建议!
提前致谢!
此致 罗伯特
答案 0 :(得分:2)
我也使用Tomcat 7,JSF 2,Spring 3,Spring Security 3。 我有同样的问题。改变编织配置没有帮助。
我的最终解决方案是在spring config中添加一行:
<aop:aspectj-autoproxy proxy-target-class="true"/>
你需要在你的课堂上使用CGLIB 希望这有助于某人。 :)
答案 1 :(得分:2)
好的,我发现了如何使用AspectJ编织来管理方法安全性。
您至少需要使用Spring-security 3.0.5,至少需要在spring-security.xml中使用正确的模式:
http://www.springframework.org/schema/security/spring-security-3.0.5.xsd
您需要添加spring-security-aspects作为依赖项:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-aspects</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
可以将新属性“mode”添加到全局方法安全标记中:
<global-method-security pre-post-annotations="enabled" mode="aspectj"/>
我认为您还必须添加标准的Spring-configuration.xml标签,以便进行AspectJ编织:
<context:load-time-weaver aspectj-weaving="on"/>
它对aop-proxy代码的 ged rid(删除)也很好:
<aop:aspectj-autoproxy proxy-target-class="true"/>
最好使用Spring-security 3.1.0,但是你必须至少使用Spring 3.0.7。
希望这会有所帮助:)
答案 2 :(得分:1)
如果未正确配置加载时间编织,通常会发生这些错误。确保您不仅要配置加载时织入器,还要加载适当的java代理,或者应用程序服务器为您执行此操作。
有关如何配置此环境的详细信息,请参阅spring文档,例如: chapter 7.8.4.6 Environment-specific configuration。虽然这涵盖了AOP的加载时间挥发主题,但它与需要加载时间编织的其他弹簧部件的配置相同。
答案 3 :(得分:0)
尝试删除拥有oneToMany字段的customerBean域。
答案 4 :(得分:0)
我认为你的bean实现了Serializable
。今天我遇到了这个问题,Serializable对代理做了一些奇怪的事情,我的方法都不可访问。摆脱Serializable,它应该工作。