2010-03-03 25 views
5

Ho creato un'applicazione web JSF 2 con facelet. Le librerie per JSF memorizzate su tomcat/lib, per condividerle tra diverse applicazioni. Ho pensato che forse sarebbe stato meglio memorizzare le librerie all'interno della cartella WEB-INF/lib dell'applicazione per rendere l'applicazione più indipendente dalle configurazioni del server.Perché i bean gestiti non sono caricati in Tomcat?

Ora quando avvio Tomcat via eclipse, i bean gestiti sono caricati e funzionanti. Ma quando avvio Tomcat direttamente/standalone i bean gestiti non vengono caricati automaticamente. Ho usato

@ManagedBean 
@SessionScoped/@RequestScoped 

annotazioni per dichiarare classi come bean gestiti.

Perché è questo? Cosa posso fare per risolverlo?

Non uso ancora alcun file faces-config.xml.

Grazie in anticipo.

Modificato:

Forse questo aiuta a vedere cosa sta succedendo:

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

Hai rimosso le librerie JSF da 'Tomcat/lib'? – BalusC

+0

Sì, li ho rimossi. – c0d3x

+0

Ugh nessuno qui parla inglese. – Andrew

risposta

1

Questo è un segno che la webapp sta usando JSF 1.x invece di JSF 2.x. Il configuratore di JSF 1.x non riconosce le annotazioni @ManagedBean che causano che non vengono caricate/inizializzate automaticamente senza la necessità di faces-config.xml.

Sospetto di una collisione nella versione delle librerie JSF utilizzata. Eseguire la scansione dell'intero classpath per i file JAR JSF e utilizzare alcuni strumenti zip/rar per determinare il file MANIFEST.MF incluso per la versione JSF effettiva. Il classpath include Tomcat/lib, JRE/lib/* e Webapp/WEB-INF/lib.

0

Ho appena avuto questo problema e trovato la soluzione era il vero attributo nel mio Maven-guerra-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> 

Quindi impostare questo a false (falso) risolto il mio problema.

ho bloggato su di esso pure: http://www.baselogic.com/blog/development/java-javaee-j2ee/propertynotfoundexception-target-unreachable-identifier-patientbean-resolved-to-null

3

JSF fagioli in classi WEB-INF /, quando è iniziato con tomcat trovare: eseguire le classi selezionata purtroppo non questa posizione.

Utilizzare mvn tomcat: run-war, ha funzionato per me.

+0

Come sai che l'OP sta utilizzando Maven? Né la domanda attuale dell'OP né alcuna delle domande precedentemente poste dall'OP indicano che sta usando Maven o almeno in qualche modo ha familiarità con esso. – BalusC

+0

Un semplice progetto JSF viene eseguito con il plugin MAven Tomcat 7 utilizzando tomcat7: run non riesce a rilevare l'annotazione @ManagedBean e l'eccezione PropertyNotFound. Ma funziona bene con mvn: tomcat7: run-war. –

0

Aggiungere META-INF/context.xml alla cartella radice Web e utilizzare run-war. Puoi inserire un tag vuoto Context all'interno del file.

Problemi correlati