Esclarecimento sobre Facelets

Pessoal, estou desenvolvendo uma aplicação utilizando Facelets, e no desenvolver, me deparei com alguns problemas que podem ser o de vocês que estão começando agora. Estarei listando os principais:

Obs: Quando os problemas ocorreram, estava utilizando a última versão do Facelets (facelets-1.2-DEV-20061110) com o Tomcat v6.0, e Eclipse 3.4.1.

Seguindo tutoriais pela internet, o que eu mais encontrava era essa explicação:

"Adicione as libs “el-api”, “el-ri"e “jsf-facelets” na sua pasta libs, faça as configurações no “web.xml” e “faces-config.xml” que estará pronto.”

Comigo não foi tão simples assim.

Utilizando o Tomcat, a primeira coisa a se observar, é que na pasta “lib” do mesmo já existe uma biblioteca chamada “el-api.jar”. Se você simplesmente adicionar as bibliotecas como é pedido, terão o seguinte erro:

[code]SEVERE: Exception sending context initialized event to listener instance of class org.apache.myfaces.webapp.StartupServletContextListener

java.lang.LinkageError: loader constraint violation: when resolving interface method
javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, org/apache/myfaces/webapp/Jsp21FacesInitializer, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ELResolver used in the signature
[/code]

Ah, então vou tirar a biblioteca do Facelets e deixar a do Tomcat. Bem, você terá outro erro:

Requires FaceletFilter to be initialized with Application!!

Caused by:
com.sun.facelets.FaceletException - Requires FaceletFilter to be initialized with Application!!

Pesquisando na internet, encontrei essa página, com o seguinte post:

[quote]I have solved the problem; I had to add a “Filter” in web.xml

Namely:

facelets com.sun.facelets.webapp.FaceletFilter facelets *.xhtml

I found this code in an example that I found on the internet. I don’t understand why this is not mentioned in any of the guides on Facelets.

Do you guys also have to use this filter, to run facelets properly?[/quote]

Eu também não sei pra que serve esse Filter (mas dá certo se você adicionar). E seguindo a documentação do próprio site do Facelets, eu não preciso adicionar nenhum Filter.

Enfim, vamos ao que interessa!

Para o Facelets funcionar perfeitamente comigo, deixei dessa maneira:

  • Fiquei utilizando a biblioteca do Tomcat “el-api.jar”, ou seja, não adicionei a que vinha no Facelets;
  • Adicionei as libs da versão stable (facelets-1.1.14), “jsf-facelets.jar” e “el-impl-1.0.jar”;
  • Configurei o web.xml e o faces-config do jeito padrão.

Aí sim funcionou! Lembrando que não utilizei nada da última versão do Facelets, e sim da versão stable dele!

Espero ter ajudado, e qualquer novidade coloco aqui! Valeu!

Poxa,

legal ter compartilhado sua experiência!
Esse tipo de situação (conflitos de biblioteca) toma um tempo do caramba às vezes, e no fim a gente acaba vendo que era uma coisa “simples”.

Abraço!

[quote=Vitor Braga]Pessoal, estou desenvolvendo uma aplicação utilizando Facelets, e no desenvolver, me deparei com alguns problemas que podem ser o de vocês que estão começando agora. Estarei listando os principais:

Obs: Quando os problemas ocorreram, estava utilizando a última versão do Facelets (facelets-1.2-DEV-20061110) com o Tomcat v6.0, e Eclipse 3.4.1.

Seguindo tutoriais pela internet, o que eu mais encontrava era essa explicação:

"Adicione as libs “el-api”, “el-ri"e “jsf-facelets” na sua pasta libs, faça as configurações no “web.xml” e “faces-config.xml” que estará pronto.”

Comigo não foi tão simples assim.

Utilizando o Tomcat, a primeira coisa a se observar, é que na pasta “lib” do mesmo já existe uma biblioteca chamada “el-api.jar”. Se você simplesmente adicionar as bibliotecas como é pedido, terão o seguinte erro:

[code]SEVERE: Exception sending context initialized event to listener instance of class org.apache.myfaces.webapp.StartupServletContextListener

java.lang.LinkageError: loader constraint violation: when resolving interface method
javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, org/apache/myfaces/webapp/Jsp21FacesInitializer, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ELResolver used in the signature
[/code]

Ah, então vou tirar a biblioteca do Facelets e deixar a do Tomcat. Bem, você terá outro erro:

Requires FaceletFilter to be initialized with Application!!

Caused by:
com.sun.facelets.FaceletException - Requires FaceletFilter to be initialized with Application!!

Pesquisando na internet, encontrei essa página, com o seguinte post:

[quote]I have solved the problem; I had to add a “Filter” in web.xml

Namely:

facelets com.sun.facelets.webapp.FaceletFilter facelets *.xhtml

I found this code in an example that I found on the internet. I don’t understand why this is not mentioned in any of the guides on Facelets.

Do you guys also have to use this filter, to run facelets properly?[/quote]

Eu também não sei pra que serve esse Filter (mas dá certo se você adicionar). E seguindo a documentação do próprio site do Facelets, eu não preciso adicionar nenhum Filter.

Enfim, vamos ao que interessa!

Para o Facelets funcionar perfeitamente comigo, deixei dessa maneira:

  • Fiquei utilizando a biblioteca do Tomcat “el-api.jar”, ou seja, não adicionei a que vinha no Facelets;
  • Adicionei as libs da versão stable (facelets-1.1.14), “jsf-facelets.jar” e “el-impl-1.0.jar”;
  • Configurei o web.xml e o faces-config do jeito padrão.

Aí sim funcionou! Lembrando que não utilizei nada da última versão do Facelets, e sim da versão stable dele!

Espero ter ajudado, e qualquer novidade coloco aqui! Valeu![/quote]

Tambem utilizando facelets em meu projeto.
JSF1.2+RichFaces3.3.0+Facelets1.1.14

Tudo certo sem problemas
Agora estou tentando colocar mascara com jQuery

Minha pagina e a sequinte:

[code]<?xml version="1.0" encoding="utf-8"?>
<jsp:root xmlns:jsp=“http://java.sun.com/JSP/Page
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:a4j=“http://richfaces.org/a4j
xmlns:rich=“http://richfaces.org/rich”>

<ui:composition template="template.jspx">
	<ui:define name="corpo">
		<rich:panel id="formulario" style="width:700px">
			<h:form>
				<a4j:loadScript src="resource://jquery.js" />
				<a4j:loadScript src="jquery.maskedinput.js" />
				<h:panelGrid columns="2">
					<h:outputText value="CEP:" />
					<h:inputText id="cep" value="" />
				</h:panelGrid>
				<rich:jQuery selector="#cep" query="mask('99.999-999')"></rich:jQuery>
			</h:form>
		</rich:panel>
	</ui:define>

	<ui:define name="rodape">
		<h1>Rodapé</h1>
	</ui:define>

	<ui:define name="cabecalho">
		<h1>Cabecalho</h1>
	</ui:define>


</ui:composition>

</jsp:root>[/code]

Ao tentar acessar a pagina

... INFO: Added Library from: jar:file:/C:/Projetos/Java/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/teste/WEB-INF/lib/richfaces-ui-3.3.0.GA.jar!/META-INF/richfaces.taglib.xml 03/06/2009 14:31:14 com.sun.facelets.FaceletViewHandler handleRenderException SEVERE: Error Rendering View[/jquery.maskedinput.js] com.sun.facelets.FaceletException: Error Parsing /jquery.maskedinput.js: Error Traced[line: 1] Content is not allowed in prolog. at com.sun.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:234) at com.sun.facelets.compiler.Compiler.compile(Compiler.java:105) at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:197) at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:144) at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:95) at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:517) ...

Se tirar as tags de <a4j:loadScript src=“resource://jquery.js” />
<a4j:loadScript src=“jquery.maskedinput.js” />
Nao da o erro mais nao coloca mascara.

Tentei a mesma aplicacao sem facelets somente JSF 1.2 RichFaces 3.3.0 funciona normalmente aparece a mascara

[code]<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@ taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@ taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j”%>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich”%>

Insert title here CEP: [/code]

Alguem ja passou por isto colocar marcara com jQuery e Facelets



Olá pessoal, bom dia.

Estou tendo problema parecido… Minha aplicação roda em um servidor próprio com Tomcat 6 + JSF 1.2 + Facelets + Richfaces 3.3.3 Final.

Esta mesma aplicação foi desenvolvida no meu pc, nos mesmos padrões, e funcionava tranquilo. Então, por motivos de força maior, tive de mudar o servidor de aplicação para o JBoss 6. Consequentemente, alterações foram necessárias para fazer o servidor dar o deploy. Até aqui tudo bem. Agora vem a problemática.

O facelets começou a se comportar de forma estranha. Com a versão antiga da lib utilizada (jsf-facelets.jar), a aplicação abre, mas quando precisa renderizar algum componente facelets, ele dá um erro. Após atualizar a página, ele aparece normalmente. Mudei a lib para a ultima versão estável (jsf-facelets-1.1.14.jar), e então a aplicação não consegue carregar nenhum componente facelets. Acusa erro em um método String de um h:commandButton da página. Retirei esse botão, pra ver o que rolava. Resultado: nenhum componente, com exceção dos outputText aparecem.

O JBoss possui algumas bibliotecas JSF padrões do próprio servidor de aplicação, então reduzi ao máximo as libs do projeto, restando apenas:

c3p0-0.9.1.2 commons-digester-1.8 commons-email-current ehcache-1.2.3 hibernate-c3p0-3.3.0.GA iText-2.1.7 jasperreports-3.7.2 jsf-facelets-1.1.14 postgresql-8.4-701.jdbc4 richfaces-api-3.3.3.Final richfaces-impl-3.3.3.Final richfaces-ui-3.3.3.Final

Com certeza é algum problema de incompatibilidade de libs, mas ainda não consegui detectar o problema. Também não sei se devo mudar as versões de web.xml e faces-config.xml.

Qualquer ajuda, agradeço.

Ótimo fim de semana a todos.