Glassfish中使用JSF托管bean的spring bean的问题
我正在使用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上却搞砸了。也许在调用监听器的顺序时有不同的容器实现方式?
有关这个问题的任何想法?提前致谢!
一切正常时,它在Tomcat 7上运行,但在Glassfish 3.1它你检查项目的依赖关系搞砸
?据我所知的Tomcat 7不提供JSF 2.0支持开箱
为正确配置的今年春季论坛的帖子可能是有用的http://forum.springsource.org/showthread.php?86577-Spring-3-JSF-2&p=290645#post290645
感谢迈克尔,是的,我有JSF依赖作为Mojarra 2.0.4明确地为Tomcat 7,而在glassfish这将被忽略,因为glassfish已经在JSF实现中构建为Mojarra 2.1.0。对于Spring配置,我没有发现任何问题,并且该项目能够在Tomcat 7中正常工作,如果配置出现问题,则不应该出现这种情况。 – julian 2011-06-17 01:50:29
我也正好具有同样的问题。如果您发现任何问题,请发布解决方案。 – 2012-03-22 12:58:07