MyFaces 2 c/ Tomcat 6 dando problema

3 respostas
R

Pessoal,

Comecei a estudar a versão 2 do JSF usando MyFaces. Pois bem, meu objetivo é muito simples. Criar um MB e duas páginas. Uma página contém um formulário que mandará informações para a outra exibir. Exemplo padrão para quem está começando a estudar alguma tecnologia. Só que eu estou batendo cabeça aqui e tendo um problema que não consigo identificar o que é. Por isso preciso da ajuda dos caros colegas.

Primeiramente segue informações do meu exemplo.

FuncionarioMB.java
package br.com.beans.mb;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 * @author Ricardo
 *
 */
@ManagedBean(name="Func")
@RequestScoped
public class FuncionarioMB implements Serializable {
	
	private static final long serialVersionUID = 8851994468276789901L;
	
	private String nomeCompleto;
	private Integer idade;
	
	public String getNomeCompleto() {
		return nomeCompleto;
	}
	
	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}
	
	public Integer getIdade() {
		return idade;
	}
	
	public void setIdade(Integer idade) {
		this.idade = idade;
	}
	
	public String cadastrar() {
		return "sucesso";
	}

}
helloWorld.jsp (Página com os formulários)
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html">

<h:head>
	<title>Hello World</title>
</h:head>
<h:body>
	<h:form id="mainForm">
		<h:panelGrid columns="2">
			<h:outputLabel for="name" value="Please enter your name" />
			<h:inputText id="name" value="#{func.nomeCompleto}"
				required="true" />

			<h:outputLabel for="idade" value="Sua idade" />
			<h:inputText id="idade" value="#{func.idade}" />

			<h:commandButton value="Press me" action="#{Func.cadastrar}" />
			<h:messages showDetail="true" showSummary="false" />
		</h:panelGrid>
	</h:form>
</h:body>
</html>
sucesso.jsp (vai mostrar o conteúdo da propriedade nomeCompleto)
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html">
<h:head>
	<title>Insert title here</title>
</h:head>
<h:body>
	<h1>Funcionou??</h1>
	<h:outputText value="#{Func.nomeCompleto}"></h:outputText>
</h:body>
</html>
faces-config.xml
<?xml version="1.0"?>

<faces-config version="2.0" 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_2_0.xsd">
	
	<!-- navigation rules for helloWorld.jsp -->
	<navigation-rule>
		<from-view-id>/helloWorld.jsp</from-view-id>
		<navigation-case>
			<from-outcome>sucesso</from-outcome>
			<to-view-id>/sucesso.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	
</faces-config>
web.xml
<?xml version="1.0"?>

<web-app 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"
	version="2.4">

	<description>MyProject web.xml</description>

	<!-- Extensions Filter -->
	<filter>
		<filter-name>extensionsFilter</filter-name>
		<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
		<init-param>
			<description>Set the size limit for uploaded files.
                Format: 10 - 10 bytes
                10k - 10 KB
                10m - 10 MB
                1g - 1 GB</description>
			<param-name>uploadMaxFileSize</param-name>
			<param-value>100m</param-value>
		</init-param>
		<init-param>
			<description>Set the threshold size - files
                below this limit are stored in memory, files above
                this limit are stored on disk.

                Format: 10 - 10 bytes
                10k - 10 KB
                10m - 10 MB
                1g - 1 GB</description>
			<param-name>uploadThresholdSize</param-name>
			<param-value>100k</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>extensionsFilter</filter-name>
		<url-pattern>*.faces</url-pattern>
	</filter-mapping>

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

	<!-- Welcome files -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

</web-app>

Estou usando Maven2 no projeto. Acredito que não seja necessário postar o POM aqui, pois aparentemente está tudo certo com relação as bibliotecas.

Empacotando minha aplicação usando mvn package, é gerado o .WAR e este war eu jogo na pasta webapps do Tomcat 6. Inicio o Tomcat normalmente. No log nenhuma excessão é disparada. O deploy da aplicação ocorre normalmente. Quando acesso a página helloWorld.jsf a página vem em branco. Se eu acessar o código fonte dessa página em branco que o tomcat cospe para mim, vem isso aqui:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"> 
 
<h:head> 
	<title>Hello World</title> 
</h:head> 
<h:body> 
	<h:form id="mainForm"> 
		<h:panelGrid columns="2"> 
			<h:outputLabel for="name" value="Please enter your name" /> 
			<h:inputText id="name" value="#{func.nomeCompleto}"
				required="true" /> 
 
			<h:outputLabel for="idade" value="Sua idade" /> 
			<h:inputText id="idade" value="#{func.idade}" /> 
 
			<h:commandButton value="Press me" action="#{Func.cadastrar}" /> 
			<h:messages showDetail="true" showSummary="false" /> 
		</h:panelGrid> 
	</h:form> 
</h:body> 
</html>

Ou seja, parece que o Tomcat não interpreta as tags! O arquivo .WAR que é gerado está com todas as libs que preciso. Aversão do MyFaces que eu estou usando é a 2.0.0-beta2.

Alguém tem alguma noção do que pode ser isso? Ou como resolver?

Muito obrigado

3 Respostas

R

Problema resolvido galera.

Eu estava misturando JSP com XHTML. Como Facelets já vem incorporado ao JSF 2, as páginas devem ter extensão .XHTML e começar com a seguinte declaração:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html">

Mas isso me leva a um outro problema. Na verdade é mais um problema de conforto no desenvolvimento. O Eclipse não tem Auto-Complete de código para arquivos com extensão .XHTML. Quando as páginas estavam com extensão .JSP o auto-complete funcionava muito bem.

Alguém tem alguma sugestão para ter auto-complete no Eclipse para páginas com extensão .XHTML?

Obrigado

danieldomingues86

Ola,

Eu uso JBoss Tools no Eclipse e tenho total suporte a auto-complete em paginas .XHTML, tente isso.

Um Abraco.

R

Valeu cara.

Funcinou legal. Baixei aqui: http://www.jboss.org/tools/download/stable/3_1_GA.html

Criado 13 de março de 2010
Ultima resposta 14 de mar. de 2010
Respostas 3
Participantes 2