2011-06-16 115 views
2

我正在使用JSF 2.0和Spring 3.0.5的項目,該項目運行在Glassfish 3.1開源版本上。然後,我有一個ApplicationScoped管理的聲明與 '渴望' 豆:Glassfish中使用JSF託管bean的spring bean的問題

@ManagedProperty(#{foo}) 
private Foo foo; 

,然後在Spring上下文文件中配置FOO:

<bean id="foo" class="Foo" /> 

@ManagedBean(eager = true) 
@ApplicationScoped 
public class CommonMB 

其中有一個託管屬性使用EL注入最後在faces-config.xml中配置Spring EL resolver:

畢竟,當我開始了Glassfish的,引發異常指示管理propertiy沒有被正確注射:

Caused by: com.sun.faces.mgbean.ManagedBeanCreationException: unable to set property 'foo' on managed bean 'commonMB' 
at com.sun.faces.mgbean.ManagedBeanBuilder$BakedBeanProperty.set(ManagedBeanBuilder.java:615) 
at com.sun.faces.mgbean.ManagedBeanBuilder.buildBean(ManagedBeanBuilder.java:133) 
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:104) 
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) 
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) 
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:256) 
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:255) 
... 76 more 
Caused by: java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered? 
at org.springframework.web.jsf.FacesContextUtils.getRequiredWebApplicationContext(FacesContextUtils.java:83) 
at org.springframework.web.jsf.DelegatingVariableResolver.getWebApplicationContext(DelegatingVariableResolver.java:167) 
at org.springframework.web.jsf.DelegatingVariableResolver.getBeanFactory(DelegatingVariableResolver.java:156) 
at org.springframework.web.jsf.DelegatingVariableResolver.resolveSpringBean(DelegatingVariableResolver.java:134) 
at org.springframework.web.jsf.DelegatingVariableResolver.resolveVariable(DelegatingVariableResolver.java:112) 
at com.sun.faces.el.VariableResolverChainWrapper.getValue(VariableResolverChainWrapper.java:115) 
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
at de.odysseus.el.tree.impl.ast.AstIdentifier.eval(AstIdentifier.java:84) 
at de.odysseus.el.tree.impl.ast.AstEval.eval(AstEval.java:51) 
at de.odysseus.el.tree.impl.ast.AstNode.getValue(AstNode.java:30) 
at de.odysseus.el.TreeValueExpression.getValue(TreeValueExpression.java:122) 
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55) 
at com.sun.faces.mgbean.BeanBuilder$Expression.evaluate(BeanBuilder.java:591) 
at com.sun.faces.mgbean.ManagedBeanBuilder$BakedBeanProperty.set(ManagedBeanBuilder.java:606) 
... 82 more 

由於我使用的ContextLoaderListener來初始化Spring bean的,並從堆棧跟蹤,似乎當JSF開始要在com.sun.faces.config.ConfigureListener中初始化JSF bean,Spring上下文尚未設置,這就是發生此異常的原因。

所以我想知道如果ConfigureListener(JSF)和ContextLoaderListener(Spring)之間的初始化順序有問題,Spring偵聽器應該在JSF偵聽器之前,但它沒有。此外,JSF監聽器是隱式配置在JSF impl中的,我不知道如何更改它們的順序。

順便說一句,當它在Tomcat 7上運行時,一切正常,但在Glassfish 3.1上卻搞砸了。也許在調用監聽器的順序時有不同的容器實現方式?

有關這個問題的任何想法?提前致謝!

+0

我也正好具有同樣的問題。如果您發現任何問題,請發佈解決方案。 – 2012-03-22 12:58:07

回答

0

一切正常時,它在Tomcat 7上運行,但在Glassfish 3.1它你檢查項目的依賴關係搞砸

?據我所知的Tomcat 7不提供JSF 2.0支持開箱

爲正確配置的今年春季論壇的帖子可能是有用的http://forum.springsource.org/showthread.php?86577-Spring-3-JSF-2&p=290645#post290645

+0

感謝邁克爾,是的,我有JSF依賴作爲Mojarra 2.0.4明確地爲Tomcat 7,而在glassfish這將被忽略,因爲glassfish已經在JSF實現中構建爲Mojarra 2.1.0。對於Spring配置,我沒有發現任何問題,並且該項目能夠在Tomcat 7中正常工作,如果配置出現問題,則不應該出現這種情況。 – julian 2011-06-17 01:50:29