为什么Managed Bean没有在Tomcat中加载?

时间:2010-03-03 09:23:03

标签: tomcat jsf javabeans

我使用facelets创建了一个JSF 2 Web应用程序。 JSF的库存储在tomcat / lib中,以便在多个应用程序之间共享它。我想也许最好将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)

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我刚遇到这个问题,发现解决方案是我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

答案 3 :(得分:0)

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