【问题标题】:Why are Managed Beans not loaded in Tomcat?为什么 Tomcat 中没有加载托管 Bean?
【发布时间】:2011-01-23 02:55:42
【问题描述】:

我创建了一个带有 facelets 的 JSF 2 Web 应用程序。 JSF 的库存储在 tomcat/lib 中,以便在多个应用程序之间共享。我认为最好将库存储在应用程序的 WEB-INF/lib 文件夹中,以使应用程序更加独立于服务器配置。

现在,当我通过 eclipse 启动 tomcat 时,托管 bean 已加载并开始工作。但是当我直接/独立启动tomcat时,托管bean不会自动加载。我用过

@ManagedBean
@SessionScoped / @RequestScoped

将类声明为托管 bean 的注释。

这是为什么? 我能做些什么来解决它?

我还没有使用任何 faces-config.xml 文件。

提前致谢。

编辑:

也许这有助于了解发生了什么:

javax.el.PropertyNotFoundException: /Artikel.xhtml @12,108 value="#{artikelBackingBean.nameFilterPattern}": Target Unreachable, identifier 'artikelBackingBean' resolved to null
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008)
    at javax.faces.component.UIInput.validate(UIInput.java:934)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1189)
    at javax.faces.component.UIInput.processValidators(UIInput.java:691)
    at javax.faces.component.UIForm.processValidators(UIForm.java:243)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:619)

【问题讨论】:

  • 您是否从 Tomcat/lib 中删除了 JSF 库?
  • 呃,这里没有人会说英语。

标签: tomcat jsf javabeans


【解决方案1】:

META-INF/context.xml 文件添加到Web 根文件夹并使用run-war。您可以在文件中放置一个空的Context 标签。

【讨论】:

    【解决方案2】:

    jsf 在 WEB-INF/classes 中查找 bean,当使用 tomcat 启动时:运行类不在此位置。

    使用 mvn tomcat:run-war,为我工作。

    【讨论】:

    • 你怎么知道 OP 正在使用 Maven? OP 当前的问题和 OP 之前提出的任何问题都没有表明他正在使用 Maven 或至少在某种程度上熟悉它。
    • 使用 tomcat7:run 使用 MAven Tomcat 7 插件运行的简单 JSF 项目未能检测到 @ManagedBean 注释并引发 PropertyNotFound 异常。但使用 mvn:tomcat7:run-war 工作正常。
    【解决方案3】:

    我刚遇到这个问题,发现解决方案是我的 maven-war-plugin 中的真正属性

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>${plugin-war-version}</version>
                <configuration>
                    <archive>
                        <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                    <archiveClasses>true</archiveClasses>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
    

    因此将其设置为 false (false) 解决了我的问题。

    我也写了一篇博客: http://www.baselogic.com/blog/development/java-javaee-j2ee/propertynotfoundexception-target-unreachable-identifier-patientbean-resolved-to-null

    【讨论】:

      【解决方案4】:

      这表明 webapp 正在使用 JSF 1.x 而不是 JSF 2.x。 JSF 1.x 的配置器无法识别@ManagedBean 注释,这将导致它们不会在不需要faces-config.xml 的情况下自动加载/初始化。

      我怀疑所使用的 JSF 库的版本存在冲突。扫描 JSF JAR 文件的整个类路径,并使用一些 zip/rar 工具来确定包含的 MANIFEST.MF 文件以获取实际 JSF 版本。类路径包括Tomcat/libJRE/lib/*Webapp/WEB-INF/lib

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2013-03-30
        相关资源
        最近更新 更多