2010-03-03 9 views
5

Stworzyłem aplikację internetową JSF 2 z fasetkami. Biblioteki dla JSF przechowywane w tomcat/lib, aby udostępnić je pomiędzy kilkoma aplikacjami. Pomyślałem, że może lepiej będzie przechowywać biblioteki w folderze WEB-INF/lib aplikacji, aby aplikacja była bardziej niezależna od konfiguracji serwera.Dlaczego fasola zarządzana nie jest załadowana w Tomcat?

Teraz, gdy zaczynam tomcat przez zaćmienie, zarządzane ziarna są ładowane i działają. Ale kiedy zaczynam tomcat bezpośrednio/standalone zarządzane ziarno nie jest ładowane automatycznie. Użyłem adnotacji, aby zadeklarować klasy jako zarządzane komponenty bean.

Dlaczego tak jest? Co mogę zrobić, aby to naprawić?

Jeszcze nie używam żadnego pliku faces-config.xml.

Z góry dziękuję.

edycja:

Może to pomoże, aby zobaczyć, co się dzieje:

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) 
+0

Czy usunąłeś biblioteki JSF z 'Tomcat/lib'? – BalusC

+0

Tak, usunąłem je. – c0d3x

+0

Ugh, nikt tutaj nie mówi po angielsku. – Andrew

Odpowiedz

1

Jest to znak, że webapp używa JSF 1.x zamiast JSF 2.x. Konfigurator JSF 1.x nie rozpoznaje adnotacji @ManagedBean, które spowodują, że nie zostaną załadowane/zainicjowane automagicznie bez potrzeby dodania faces-config.xml.

Podejrzewam pewną kolizję w wersji użytych bibliotek JSF. Przeszukuj całą ścieżkę klas dla plików JAR JSF i użyj jakiegoś narzędzia zip/rar, aby określić dołączony plik MANIFEST.MF dla rzeczywistej wersji JSF. Ścieżka klas obejmuje Tomcat/lib, i .

0

prostu miałem ten problem i znaleźć rozwiązanie było prawdziwym atrybutem w moim 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> 

więc ustawienie to false (fałsz) rozwiązać mój problem.

I napisał o niej, jak również: http://www.baselogic.com/blog/development/java-javaee-j2ee/propertynotfoundexception-target-unreachable-identifier-patientbean-resolved-to-null

3

JSF fasoli znaleźć w klasach WEB-INF/podczas uruchamiania z tomcat: uruchomienie klas isnt tej lokalizacji.

Użyj mvn tomcat: run-war, pracował dla mnie.

+0

Skąd wiesz, że OP używa Mavena? Ani aktualne pytanie PO, ani żadne z wcześniej zadawanych pytań OP nie wskazują, że używa Mavena lub przynajmniej jest w jakiś sposób zaznajomiony z nim. – BalusC

+0

Prosty projekt JSF uruchamiany przy użyciu wtyczki MAven Tomcat 7 przy użyciu tomcat7: run nie wykrywa adnotacji @ManagedBean i rzuca wyjątek PropertyNotFound. Ale działa dobrze z mvn: tomcat7: run-war. –

0

Dodaj plik META-INF/context.xml do folderu głównego i użyj run-war. Możesz umieścić pusty plik Context w pliku.

Powiązane problemy