【发布时间】:2012-08-07 18:47:53
【问题描述】:
我有两个 web jsf 项目,它们可能共享一些类和 bean,以减少代码重复。
一个是潜在的 JNDI-ServiceLocator 应用范围 Bean。 (两个 Web 项目都从同一个 Host 访问 RemoteBeans)
JNDI - ServiceLocator Bean:
@ManagedBean(name = "jndiServiceLocatorBean")
@ApplicationScoped
public class JndiServiceLocatorBean implements Serializable
{
// code to cache jndi references
}
以 Bean 作为 ManagedProperty 的抽象类:
public abstract class AJndiServiceLocator
{
@ManagedProperty(value = "#{jndiServiceLocatorBean}")
protected JndiServiceLocatorBean jndiServiceLocatorBean = null;
public void setJndiServiceLocatorBean(final JndiServiceLocatorBean jndiServiceLocatorBean)
{
this.jndiServiceLocatorBean = jndiServiceLocatorBean;
}
}
其中一个项目的示例 Bean:
@ManagedBean(name = "testBean")
@ApplicationScoped
public class TestBean extends AJndiServiceLocator implements Serializable
{
// bean code - can now retrieve remote bean interfaces
// from super class
}
如果第一个类 JndiServiceLocatorBean 和 AJndiServiceLocator 位于项目的源文件夹中,则此代码将按预期工作。
但是,如果我将这两个类外包到两个 Web 项目之间共享的子项目中,它就不起作用。 (包含在构建路径中并标记为部署条目。)
发生注入异常:
Schwerwiegend: Error Rendering View[/index.xhtml]
com.sun.faces.mgbean.ManagedBeanCreationException: Bei der Ressourcen-Einspeisung auf dem verwalteten Bean appBean ist ein Fehler aufgetreten.
at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105)
at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
【问题讨论】:
标签: jsf jakarta-ee dependency-injection dependency-properties code-injection