Segue lista de erros comuns ao iniciar um projeto em JAVA com JSF + PRIMEFACES com o TOMCAT
Factory 'javax.faces.lifecycle.ClientWindowFactory
Erro do Tomcat na Console:
Solução:
Esse erro ocorre quando esquece de criar o "beans.xml".
Criar o "/src/main/webapp/WEB-INF/beans.xml"
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
No Log:
GRAVE: Servlet [Faces Servlet] in web application [/com.example] threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
Solução:
Após clicar em "Maven -> Update" esse erro pode ocorrer, porque o projeto não consegue mais encontrar as bibliotecas baixadas pelo Maven.
Adicionar as bibliotecas do Maven do Path:
Clique direito no projeto -> Properties -> Deployment Assembly -> Add -> Java Build Path Entries -> Maven Dependencies.
Isso ocorre no Updade do Maven porque o pom.xml deve especificar a versão 1.8 do java, sem essa configuração durante o "Maven Update" ele volta sozinho para versão 1.5 nas configurações.
Verificar aba "Problems" do Eclipse:
Mensagens do tipo "Cannot change version of project facet Dynamic Web Module to x.x" é causado porque o Eclipse muda a versão do web-app automaticamnete no web.xml após um "Maven Update".
Verifique se a versão do web-app está em 4_0, senão corrija no "web.xml"
TOMCAT NÃO INICIA - ERRO WELD-000075
APARECE NO LOG:
Erro:
The motivation of WELD-000075 is technical. Access to a public field cannot be proxied. So a bean is required to be either pseudo scoped (@dependent, @singleton) or to guarantee access through public methods (which shouldn't be hard to achieve).
Resumindo:
EXISTE UM ATRIBUTO PÚBLICO NO BEAN QUE CAUSA UM ERRO NO CDI.
ERRADO:
Solução:
TODOS OS ATRIBUTOS DO BEAN DEVEM SER PRIVATE COM ACESSO ATRAVÉS DE GET SET!!!
CERTO:
ERRO WELD-000072 - Bean declaring a passivating scope must be passivation capable.
O Bean quando é @SessionScoped ou @ViewScoped é OBRIGATÓRIO implementar Serializable!!!
Solução: SEMPRE IMPLEMENTAR SERIALIZABLE EM TODOS OS BEANS!!!