Facelets no eclipse J2EE nem a pau!

Pessoal, segui ums 10 tutoriais, usei JBoss Tools (alias não gostei dele =/ , prefiro os plugins que vem no eclipse J2EE mesmo), usei os plugins do eclipse web, tentei na mão e nada.

Todos os tutoriais que segui não funcionaram, sempre da algum erro, o mais comum é que funciona com JSP mas ele não interpreta xhtml, ou estou fazendo alguma besteira básica ou minhas bibliotecas não estão funcionando.

Quando digo básica, digo básica mesmo (quando estava aprendendo JSF por exemplo em vez de abrir o arquivo.faces tava tentando abrir arquivo.jsp só para ter uma idéia)

O sintoma é sempre o mesmo, funciona JSP, funciona JSF mas Facelets (que pe o que mais desejo) não.

Baixei as bibliotecas de seus respectivos sites e sempre a última versão estável, mas como são muitas e como não tenho bibliotecas antigas para comparar não sei qual está com problema.

Enfim, to 4 dias nessa, totalmente parado sem trabalhar. To quase desistindo de usar JSF e com vontade tremenda de voltar JSP (só de pensar no que já teria feito nesses 4 dias parados com JSP/Servlet já me parte o coração :cry: ). Mas sou brasileiro (ou teimoso) ^^

Então gostaria de que uma alma caridosa que use eclipse criasse um projeto eclipse e me enviasse com algo bem simples em Facelets (pode ter 1 única linha de código), e incluisse no zip as libs necessárias. A partir dai eu acredito que me vire.

Eu uso Tomcat 6 e eclipse J2EE.

Poxa to me sentindo com uma ferrari na mão sem combustivel para sair com o carro =/

Usar JSF sem Facelets não dá animo.

Se alguém souber de algum antidepressivo também agradeço

Abraços a todos da comu

Olá gandb,

Também tive alguns problemas quando iniciei com FaceLets,

Mais quando aprendi a utilizá-lo, os resultados foram bastante compensadores,

A construção da view fica extremamente rápida, vale a pena o esforço,

sem contar a possibilidade de empregar templates, que são de grande auxílio.

Vamos ao que interessa, tenho aqui um projeto default de facelets para eclipse:

  • Trata-se de um projeto dinâmico para web, escolhi essa opção quando criei o projeto no eclipse;

  • O projeto tem uma pasta WebContent, que contêm uma pasta WEB-INF. que contêm uma pasta lib;

  • A pasta lib contêm os seguintes arquivos jar:

common-annotations.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-logging.jar

el-api.jar
el-ri.jar

jsf-api.jar
jsf-facelets.jar
jsf-impl.jar
standard.jar

obs: sem bibliotecas commons o FaceLets não funcionou !

  • A pasta WEB-INF com dois arquivos faces-config.xml e web.xml

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 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">
 
 	<managed-bean>
		<managed-bean-name>portal</managed-bean-name>
		<managed-bean-class>br.usp.pea.lso.PortalBean</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	
 	<!-- from project setup -->
  	<application>
    	<view-handler>
      	com.sun.facelets.FaceletViewHandler
    	</view-handler>    
  	</application>
 	 	 	
  	<!-- portal.xhtml para conceitos.xhtml -->
  	<navigation-rule>
    	<from-view-id>/portal.xhtml</from-view-id>
    	<navigation-case>
      		<from-outcome>conceitos</from-outcome>
      		<to-view-id>/conceitos.xhtml</to-view-id>
    	</navigation-case>
  	</navigation-rule>
  		
</faces-config>

web.xml com configurações para Facelets

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
  
   <!-- Use Documents Saved as *.xhtml -->	
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>
  
  <!-- Special Debug Output for Development -->
  <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
  </context-param>
	  
  <!-- Optional JSF-RI Parameters to Help Debug -->
  <context-param>
    <param-name>com.sun.faces.validateXml</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>com.sun.faces.verifyObjects</param-name>
    <param-value>true</param-value>
  </context-param>
	  
  <!-- Faces Servlet -->
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
	  
  <!-- Faces Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
</web-app>
  • Na pasta WebContent com dois arquivos para a aplicação template.xhtml e portal.xhtml

template.xhtml - código do template

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

<head>
	<ui:insert name="header">
		<ui:insert name="titulo">Default TITULO</ui:insert>
		<ui:insert name="icone">Default ICONE</ui:insert>
		<ui:insert name="css">Default CSS</ui:insert>
	</ui:insert>
</head>

<body>
	<h:form>
		<ui:insert name="cabec">Default Cabecario</ui:insert>
		<ui:insert name="body">
			<ui:insert name="pagina">Pagina Default</ui:insert>
		</ui:insert>
	</h:form>
</body>

</html>

portal.xhtml com o código para substituir os templates.

com tudo isso, funcionou o projeto no eclipse !

Levei também alguns dias quebrando a cabeça com o FaceLets, mais valeu a pena mesmo !

Muito bom, vale o esforço para domina-lo.

Inclusive funciona em conjunto com a ferramenta JQuery.

Fique atento ao script Build ANT para gerar o deploy para aplicação.

Observação I: estou utilizando servidor web GlassFish;

Observação II: O Facelets quando instalado têm uma view para debug da aplicação quando ocorre algum erro, trata-se de outro detalhe que compensa a instalação do FaceLets;

Sorte, qualquer dúvida estamos por ai,

Domingos Bernardo
PEA - Departamento de Engenharia de Energia e Automação Elétricas
USP - Escola Politécnica de São Paulo

No caso como estou usando o servidor dentro do eclipse não acho que preciso do build.ant ou estou falando alguma merda?

Bom, fiz bem passo a passo aqui e deu o seguinte erro:

Dec 6, 2008 7:58:05 PM org.apache.commons.digester.Digester error
SEVERE: Parse Error at line 4 column 169: Document root element “faces-config”, must match DOCTYPE root “null”.
org.xml.sax.SAXParseException: Document root element “faces-config”, must match DOCTYPE root “null”.

Ja tinha dado esse erro em 3 tutoriais que segui.

=(
alguma dica?
To achando como disse q alguma lib ta zuada. Porem baixei elas varias vezes e continua dando erro, alguem não poderia zipar elas e upar para mim para eu ter certeza que não são (ou são) as libs?

Se não for a lib tentarei trocar o servidor, uso tomcat 6. Porem sei que muita gente usa, por isso estou achando que é mais fácil ser alguma lib

Affe, ignora.

Apesar do erro acima funcionou certinho. Acho que o problema era a falta do jar annotattions.jar.

O erro acima eu achei a resposta num site em ingles, mas ele não interfere na aplicação, basta ignorar ele.

Muito obrigado domingosbernardo, te amo!

hauha

:stuck_out_tongue:

Agora vou passar o final de semana “brincando” com facelets,

flw galera!

PS: Vendo cartela de antidepressivos