【问题标题】:JSF - Bean declaration inside class of a imported jar not workingJSF - 导入的 jar 类中的 Bean 声明不起作用
【发布时间】: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
}

如果第一个类 JndiServiceLocatorBeanAJndiServiceLocator 位于项目的源文件夹中,则此代码将按预期工作。

但是,如果我将这两个类外包到两个 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


    【解决方案1】:

    JSF 不会扫描整个类路径中的每个 JAR 以查找 JSF 工件,这在具有数十个 JAR 的大型 web 应用程序中是一项非常昂贵的工作。 JSF 将仅扫描包含 JSF 2.0 兼容 /META-INF/faces-config.xml 文件的 /WEB-INF/lib 文件夹中的 JAR。

    确保您的 JAR 符合此要求。

    • 必须在/WEB-INF/lib
    • 它必须有一个 /META-INF/faces-config.xml 和一个 JSF 2.0 兼容的根声明。

    另见:

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      相关资源
      最近更新 更多