Почему управляемые бобы не загружаются в Tomcat? - PullRequest
5 голосов
/ 03 марта 2010

Я создал веб-приложение JSF 2 с Facelets. Библиотека для JSF хранится в tomcat / lib, чтобы делиться ею между несколькими приложениями. Я подумал, что, возможно, будет лучше хранить библиотеки в папке WEB-INF / lib приложения, чтобы приложение стало более независимым от конфигураций сервера.

Теперь, когда я запускаю tomcat через eclipse, управляемые bean-компоненты загружаются и работают. Но когда я запускаю tomcat напрямую / автономно, управляемые компоненты не загружаются автоматически. Я использовал

@ManagedBean
@SessionScoped / @RequestScoped

аннотации для объявления классов как управляемых bean-компонентов.

Почему это? Что я могу сделать, чтобы это исправить?

Я пока не использую файл face-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 ]

3 голосов
/ 13 февраля 2013

jsf находит bean-компоненты в WEB-INF / classes, когда запускается с tomcat: запускайте классы не в этом месте.

Используйте mvn tomcat: run-war, сработало для меня.

1 голос
/ 03 марта 2010

Это признак того, что веб-приложение использует JSF 1.x вместо JSF 2.x. Конфигуратор JSF 1.x не распознает аннотации @ManagedBean, что приводит к тому, что они не загружаются / не инициализируются автоматически без необходимости faces-config.xml.

Я подозреваю, что произошла коллизия в версии используемых библиотек JSF. Просканируйте весь путь к классам JSF-файлов JSF и используйте инструмент zip / rar, чтобы определить включенный файл MANIFEST.MF для актуальной версии JSF. Путь к классам включает Tomcat/lib, JRE/lib/* и Webapp/WEB-INF/lib.

0 голосов
/ 30 января 2014

Добавьте META-INF/context.xml файл в корневую папку и используйте run-war. Вы можете поместить пустой тег Context в файл.

0 голосов
/ 13 февраля 2011

У меня только что возникла эта проблема, и я обнаружил, что решение является истинным атрибутом моего плагина maven-war-plug

        <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

...