2010-03-03 8 views
5

Creé una aplicación web JSF 2 con facelets. Las libs para JSF donde se almacenan en tomcat/lib, para compartirlo entre varias aplicaciones. Pensé que tal vez sería mejor almacenar las bibliotecas dentro de la carpeta WEB-INF/lib de la aplicación, para que la aplicación fuera más independiente de las configuraciones del servidor.¿Por qué los beans administrados no se cargan en Tomcat?

Ahora cuando comienzo tomcat vía eclipse, los beans administrados se cargan y funcionan. Pero cuando inicio tomcat directamente/independiente, los beans administrados no se cargan automáticamente. Usé

@ManagedBean 
@SessionScoped/@RequestScoped 

anotaciones para declarar las clases como beans gestionados.

¿Por qué es esto? ¿Qué puedo hacer para solucionarlo?

Aún no uso ningún archivo faces-config.xml.

Gracias de antemano.

Editado:

Tal vez esto ayuda a ver que hay de nuevo:

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

¿Has eliminado las librerías JSF de 'Tomcat/lib'? – BalusC

+0

Sí, los eliminé. – c0d3x

+0

Ugh nadie aquí habla inglés. – Andrew

Respuesta

1

Esta es una señal de que la aplicación de web está utilizando 1.x JSF en lugar de JSF 2.x. El configurador de JSF 1.x no reconoce las anotaciones @ManagedBean que provocarán que no se carguen/inicialicen automágicamente sin la necesidad de faces-config.xml.

Sospecho que hay una colisión en la versión de las bibliotecas JSF utilizadas. Escanee toda la ruta de clase para los archivos JAR JSF y use alguna herramienta zip/rar para determinar el archivo MANIFEST.MF incluido para la versión JSF real. El classpath incluye Tomcat/lib, JRE/lib/* y Webapp/WEB-INF/lib.

0

que acaba de tener este problema y encontró la solución era el verdadero atributo en mi experto en la 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> 

Así que este valor está a falsa (falso) resolvió mi problema.

blogged sobre él, así: http://www.baselogic.com/blog/development/java-javaee-j2ee/propertynotfoundexception-target-unreachable-identifier-patientbean-resolved-to-null

3

El JSF encontrar frijoles en clases WEB-INF /, cuando se inicia con Tomcat: ejecutar las clases NO ES esta ubicación.

Usar mvn tomcat: run-war, funcionó para mí.

+0

¿Cómo sabes que OP está usando Maven? Ni la pregunta actual de OP ni ninguna de las preguntas anteriores de OP indican que está usando Maven o que al menos está de alguna forma familiarizado con él. – BalusC

+0

Un proyecto JSF simple se ejecuta con el complemento MAven Tomcat 7 utilizando tomcat7: la ejecución no puede detectar la anotación @ManagedBean y arrojar la excepción PropertyNotFound. Pero funciona bien con mvn: tomcat7: run-war. –

0

Agregue el archivo META-INF/context.xml a la carpeta raíz web y use run-war. Puede poner una etiqueta Context vacía dentro del archivo.

Cuestiones relacionadas