Esclarecimento sobre Facelets

3 respostas
V

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:

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

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:

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?

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!

3 Respostas

L

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!

W
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:

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

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:

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?

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!

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:

<?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>

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

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

<%@ 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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<f:view>
	<h:form>
		<a4j:loadScript src="resource://jquery.js" />
		<a4j:loadScript src="jquery.maskedinput.js" />
		CEP:<h:inputText id="cep" value="" />
		<rich:jQuery selector="#cep" query="mask('99.999-999')"></rich:jQuery>
	</h:form>
</f:view>
</body>
</html>

Alguem ja passou por isto colocar marcara com jQuery e Facelets



K

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.

Criado 28 de janeiro de 2009
Ultima resposta 16 de set. de 2011
Respostas 3
Participantes 4