2011-06-23 26 views
10

今天我碰到这个问题,真的让我感到困扰,因为几乎代码已经工作(即使在恢复到旧版本后也停止工作)。Java/JSF/Tomcat/Spring - 代理对象有不同的方法比原始对象

我在Facelets-Page上访问Spring-Bean。 Spring将这些对象包装在代理中以使用方面和其他一些东西。

问题是,当我试图访问一个bean的属性时,我得到一个异常。例外是这样的:

javax.el.PropertyNotFoundException: /customers.xhtml @23,27 value="#{customerBean.customer}": Property 'customer' not found on type $Proxy88 

我知道肯定(!!),相应的getter/setter方法在那里。 事情我试过至今:

  • 将应用程序部署到其他Tomcat的安装
  • 全部清除Tomcat的缓存,webapp的目录
  • 清洁日食项目
  • 检查为依据的方法使用javap(以及其中的方法/属性)
  • 更改该bean的范围
  • 更改该bean的类名称
  • 更改的Spring bean-ID
  • 更改豆

无论我做什么的的serialVersionUID,该类是有点不正确包裹或由类加载器无法正确加载。

有没有人有一个想法可能会导致这样的问题?我不知道要额外尝试什么,所以非常感谢任何建议!

在此先感谢!

问候, 罗伯特

+0

你说“Spring将这些对象包装在代理中”。你如何配置它来做到这一点?什么机制?什么配置? – skaffman

+0

那么没有配置,因为春天默认是这样。这是需要做的事情,如自动装配属性,而无需setter方法。 –

+1

Spring默认不会这样做。某个地方,你告诉它要这么做。通过现场注入进行自动装配是通过反射来完成的,而不是代理。 – skaffman

回答

1

如果加载时间编织配置不正确,这些错误通常发生。确保您不仅配置加载时织布工,而且还要加载合适的Java代理,或者应用程序服务器为您完成该工作。

有关如何配置此环境的详细信息,请参阅spring文档。 chapter 7.8.4.6 Environment-specific configuration。虽然这涵盖了AOP的加载时间波动主题,但它与需要加载时间编织的其他弹簧部件的配置相同。

0

尝试删除拥有oneToMany字段的customerBean域。

2

我也使用Tomcat 7,JSF 2,Spring 3,Spring Security 3. 我有同样的问题。改变编织配置没有帮助。

我最终的解决办法是在春天的配置添加一行:

<aop:aspectj-autoproxy proxy-target-class="true"/> 

柔需要在classpath CGLIB。
希望这可以帮助别人。:)

2

好的,我发现如何使用AspectJ编织管理方法安全性。

您需要使用至少春季安全3.0.5,您需要在弹簧security.xml文件使用权的模式,至少包括:
http://www.springframework.org/schema/security/spring-security-3.0.5.xsd

您需要添加弹簧安全方面作为一个依赖:

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-aspects</artifactId>    
    <version>3.0.5.RELEASE</version> 
</dependency> 

比你可以添加新属性“模式”到全局法安全标签:

<global-method-security pre-post-annotations="enabled" mode="aspectj"/> 

我想你也必须添加到您的标准的Spring-configuration.xml中,标签使AspectJ织:

<context:load-time-weaver aspectj-weaving="on"/> 

而且它也很好GED RID(删除)AOP代理标签的

<aop:aspectj-autoproxy proxy-target-class="true"/> 

另外它最好使用Spring-security 3.1.0,但是你至少也必须使用Spring 3.0.7。

希望这有助于:)

+0

我使用Spring 4.3.4,Java 8和Weblogic 12.2.1.0,这个答案帮助我解决了'javax.el.PropertyNotFoundException'。谢谢@ ondrej-bozek –

0

我觉得你的bean实现Serializable。我今天碰到了这个,Serializable对代理做了一些奇怪的事情,我的方法都不可访问。摆脱序列化,它应该工作。

相关问题