JSF não starta aplicação

7 respostas
Pedrosa

Olá, após assistir o mini curso do pessoal da Globalcode sobre JSF, muito bom por sinal, estou tentando fazer um simples Hello Word mas a aplicação não starta pelo manager do Tomcat 6:

Meu xeb.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <context-param>             
    <param-name>com.sun.faces.verifyObjects</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>com.sun.faces.validateXml</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>
  <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>facelets.SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
  </context-param>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>
      30
    </session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>
      index.jsp
    </welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>
  <filter>      
    <display-name>Ajax4jsf Filter</display-name>
    <filter-name>ajax4jsf</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
  </filter>   
  <filter-mapping>
    <filter-name>ajax4jsf</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>  
</web-app>

E o facesconfig.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
  <application>
    <view-handler>
      com.sun.facelets.FaceletViewHandler
    </view-handler>
  </application>
  
  <managed-bean>
    <managed-bean-name>
      olaMundoMB
    </managed-bean-name>
    <managed-bean-class>
      br.com.pedrosa.controlador.OlaMundoMB
    </managed-bean-class>
    <managed-bean-scope>
      request
    </managed-bean-scope>
  </managed-bean>
  <managed-bean>
    <managed-bean-name>associado</managed-bean-name>
    <managed-bean-class>br.com.pedrosa.controlador.AssociadoController</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>
  <converter>
    <converter-for-class>br.com.pedrosa.model.Associado</converter-for-class>
    <converter-class>br.com.pedrosa.controlador.AssociadoConverter</converter-class>
  </converter>
  <navigation-rule>
    <navigation-case>
      <from-outcome>associados</from-outcome>
      <to-view-id>/associados.xhtml</to-view-id>
    </navigation-case>
  </navigation-rule>
</faces-config>

O classpath esta configurado certinho, alguém tem ideia do pode estar acontecendo?

7 Respostas

G

Cola o log de erros no post que fica mais fácil ajudar.

Pedrosa

Comentei um trecho do web.xml

<listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>
  <filter>
        
    <display-name>Ajax4jsf Filter</display-name>
    <filter-name>ajax4jsf</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
  </filter>   
  <filter-mapping>
    <filter-name>ajax4jsf</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>

e a aplicação startou porém esta dando null pointer

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet Faces Servlet threw exception
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
	java.lang.Thread.run(Thread.java:619)

root cause

java.lang.NullPointerException
	javax.faces.webapp.FacesServlet.init(FacesServlet.java:144)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
	java.lang.Thread.run(Thread.java:619)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.
Apache Tomcat/6.0.10

A codigo da pagina é esse:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<tags xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
  <f:subview>
    <h:messages errorStyle="color: red" infoStyle="color: green" layout="table">
      <h:message />
    </h:messages>
    
    <h:form id="NovoAssociado">
      <h:panelGrid columns="2">
        <h:outputText value="Nome:"/>
        <h:inputText id="nomeAssociado" value="#{associado.associado.nomeAssociado}" title="NomeAssociado" />
        
        <h:outputText value="Email:"/>
        <h:inputText id="email" value="#{associado.associado.email}" title="Email" />
        
        <h:outputText value="Senha:"/>
        <h:inputText id="senha" value="#{associado.associado.senha}" title="Senha" />
        
        <h:outputText value="Cidade:"/>
        <h:inputText id="cidade" value="#{associado.associado.cidade}" title="Cidade" />
        
        <h:outputText value="Estado:"/>
        <h:inputText id="estado" value="#{associado.associado.estado}" title="Estado" />
        
      </h:panelGrid>
      
      <h:commandButton  action="#{associado.create}" id="commandCreate" value="Salvar"/>
      <br/>
      <h:commandLink action="associado_list" value="Show All Associado"/>
    </h:form>
  </f:subview>
  
</tags>

Suspeito que seja falta de algum jar, mais quais realmente são obrigatórios?

Jair_Rillo_Junior

Você está usando o Myfaces?

Eu estou utilizando o JSF RI e uso o seguinte listener:

&lt;listener&gt;
		&lt;listener-class&gt;
			com.sun.faces.config.ConfigureListener
		&lt;/listener-class&gt;
	&lt;/listener&gt;    
	&lt;servlet&gt;
Pedrosa

Sim o projeto usa myfaces, o problema é que o exemplo é gerado pelos wizards no NB para JBoss e eu fiz na unha pelo Eclipse para descobrir as depedências e testar no Tomcat, pois não estou rodando EJB.

Passos Sugeridos:

  • Criar biblioteca Hibernate no Netbeans
  • Criar banco de dados no MySQL e tabela conforme comando
    apresentado;
  • Dentro do NetBeans vá no menu Tools -> Library Manager em seguida
    clique em New Library, com nome Hibernate.
  • Clique em Add Jar/Folder? e escolha os seguintes JARs no diretório
    onde está instalado o Hibernate Entity Manager.
  • Escolha os JARS hibernate-entitymanager.jar, lib\ejb3-persistence.jar e
    lib\hibernate-annotations.jar.

Tenho todos os jars do Hibernate e JPA e os do JSF utilizo esses:

ajax4jsf-1.1.0.jar
commons-fileupload-1.0.jar
el-api.jar,el-ri.jar
oscache-2.3.2.jar
richfaces-3.0.0.jar
tomahawk-1.1.3.jar
jsf-impl.jar
jsf-api.jar

Ou seja o exemplo esta incompleto, de acordo com web.xm original eu ainda necessito dos jars do myfaces?, mas quais são eles?

Pedrosa

Após adicionar os jars do myfaces e suas depedencias, consigo startar com web.xml original porém ao acessar a página o erro já e outro:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
	org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

root cause

java.lang.NoSuchMethodError: javax.faces.application.ViewHandler.initView(Ljavax/faces/context/FacesContext;)V
	org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:61)
	org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
	org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)
	org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.
Apache Tomcat/6.0.10
Pedrosa

Porr… mais depedencias, estou baixando o facelets talvez resolva mais 2 jars e um tld, aff que saga.

http://www.thearcmind.com/confluence/display/SHJFT/Getting+started+with+JSF,+Facelets,+Eclipse+WTP+and+Tomcat

Jair_Rillo_Junior

Eu aconselho o seguinte, já que você está começando agora, começando com um helloWorld, não precisa querer inserir tudo de uma unica vez em um projeto

Pelo que eu pude perceber, seu projeto tem o MyFaces, Tomahawk, Facelets, Ajax4JSF, Richfaces…

Começa pelo inicio.
Tenta implementar um Hello World usando apenas a implementação do JSF (seja JSF RI, MyFaces, ADF…), depois adicione o tomahawk e assim vai.

E aconselho também, agora no começo não utilizar esses wizards de NB, Eclipse, etc, crie na mão os arquivos para você compreender legal.

Criado 12 de setembro de 2007
Ultima resposta 12 de set. de 2007
Respostas 7
Participantes 3