Java Server Faces - Problema [RESOLVIDO]

5 respostas
R

Bom dia, estou com alguns problemas ao tentar usar JSF.

Segue a minha página JSP

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib
	uri="http://java.sun.com/jsf/html" prefix="h"%><%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Incluir Visitante</title>
</head>
<body>
<f:view>
	<h:form>
	<h:outputText value="Cadastro de Visitantes"></h:outputText>
	</br>
	Nome  &lt;h:inputText value="#{visitante.nome}"&gt;&lt;/h:inputText&gt;</br>
	E-mail &lt;h:inputText value="#{visitante.email}"&gt;&lt;/h:inputText&gt;</br>
	
	Data de Nascimento &lt;h:inputText value="#{visitante.dataNascimento}"&gt;&lt;/h:inputText&gt;</br>
	Profissão                 &lt;h:inputText value="#{visitante.profissao}"&gt;&lt;/h:inputText&gt;</br>
	Recebe Informativo  &lt;h:inputText value="#{visitante.recebeInformativo}"&gt;&lt;/h:inputText&gt;</br>

	DDD MgrVisitante      &lt;h:inputText value="#{telefone.ddd}"&gt;&lt;/h:inputText&gt;</br>
	Numero MgrVisitante &lt;h:inputText value="#{telefone.numero}"&gt;&lt;/h:inputText&gt;</br>
	Tipo MgrVisitante       &lt;h:inputText value="#{telefone.tipo}"&gt;&lt;/h:inputText&gt;</br>
	
	Logradouro         &lt;h:inputText value="#{endereco.logradouro}"&gt;&lt;/h:inputText&gt;</br>
	Número              &lt;h:inputText value="#{endereco.numero}"&gt;&lt;/h:inputText&gt;</br>
	Complemento      &lt;h:inputText value="#{endereco.complemento}"&gt;&lt;/h:inputText&gt;</br>
	CEP                    &lt;h:inputText value="#{endereco.cep}"&gt;&lt;/h:inputText&gt;</br>
	Cidade                &lt;h:inputText value="#{endereco.cidade}"&gt;&lt;/h:inputText&gt;</br>
	UF                       &lt;h:inputText value="#{endereco.uf}"&gt;&lt;/h:inputText&gt;</br></br>

       &lt;h:commandButton value="addVisitante" action="#{visitante.addVisitante}"/&gt;

    &lt;/h:form&gt;

&lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;

Então, eu tenho três beans> telefone, endereco e visitante.

Segue a minha classe MgrVisitante, com o método addVisitante que o botão "chama".

package application;

import domain.Endereco;
import domain.Telefone;
import domain.Visitante;

public class MgrVisitante {
	
	private Endereco endereco;
	private Visitante visitante;
	private Telefone telefone;

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Visitante getVisitante() {
		return visitante;
	}

	public void setVisitante(Visitante visitante) {
		this.visitante = visitante;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}
    
    public String addVisitante() {
    	String action = null;

    	if (visitante.getNome().length() &gt;= 2
    			&& telefone.getNumero() &gt; 0
    				&& endereco.getLogradouro().length() &gt;=4) {
    		action = "addActionTrue";
    	}
    	else action = "addActionFalse";
    	
    	return action;
    }
}

Como podem ver, se tem um objeto visitante com nome com mais de 2 caracteres e numero de telefone > 0 e endereco com logradouro > 4 vai para a página de sucesso (addActionTrue).

Fiz o mapeamento dos beans e do management bean tudo ok, está funcionando.
Porém, quando clico no botão SUBMIT aparece uma exception.

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)

root cause

java.lang.NullPointerException

application.MgrVisitante.addVisitante(MgrVisitante.java:40)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

org.apache.el.parser.AstValue.invoke(AstValue.java:131)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:71)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:95)

javax.faces.component.UICommand.broadcast(UICommand.java:384)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:452)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:764)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:132)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

Alguém pode me dar uma Ajuda??? Não consigo mandar os três objetos "populados" para o management bean???

Uma outra dúvida, estou separando os pacotes da minha aplicação (domain, respository, application), os management beans ficam no pacote application mesmo ou em outro ???

Agradeço a todos!

5 Respostas

tubiluki

passa o faces-config.xml

pra gente dar uma olhada.

R

Segue abaixo o faces config
Obrigado
Rodrigo

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    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-facesconfig_1_2.xsd"
    version="1.2">
	<managed-bean>
		<managed-bean-name>
		pessoaManager</managed-bean-name>
		<managed-bean-class>
		application.PessoaManager</managed-bean-class>
		<managed-bean-scope>
		session</managed-bean-scope>
	</managed-bean>
	<managed-bean>
		<managed-bean-name>
		loginBean</managed-bean-name>
		<managed-bean-class>
		login.LoginBean</managed-bean-class>
		<managed-bean-scope>
		session</managed-bean-scope>
	</managed-bean>
		
<validator>
		<display-name>
		Validate Password</display-name>
		<validator-id>
		login.validatePassword</validator-id>
		<validator-class>
		login.validatePassword</validator-class>
	</validator>
	<managed-bean>
		<managed-bean-name>
		visitante</managed-bean-name>
		<managed-bean-class>
		domain.Visitante</managed-bean-class>
		<managed-bean-scope>
		session</managed-bean-scope>
	</managed-bean>
	<managed-bean>
	<managed-bean-name>
		telefone</managed-bean-name>
		<managed-bean-class>
		domain.Telefone</managed-bean-class>
		<managed-bean-scope>
		session</managed-bean-scope>
	</managed-bean>
	<managed-bean>
	<managed-bean-name>
		endereco</managed-bean-name>
		<managed-bean-class>
		domain.Endereco</managed-bean-class>
		<managed-bean-scope>
		session</managed-bean-scope>
	</managed-bean>	
	<navigation-rule>
		<display-name>
		/cadastro/cadastro</display-name>
		<from-view-id>/cadastro/cadastro.jsp</from-view-id>
		<navigation-case>
			<from-outcome>addSuccess</from-outcome>
			<to-view-id>/cadastro/success.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>addFail</from-outcome>
			<to-view-id>/cadastro/error.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	<navigation-rule>
		<display-name>
		/login/login</display-name>
		<from-view-id>/login/login.jsp</from-view-id>
		<navigation-case>
			<from-outcome>login</from-outcome>
			<to-view-id>/login/welcome.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	<navigation-rule>
		<display-name>
		visitante/visitante</display-name>
		<from-view-id>/visitante/visitante.jsp</from-view-id>
		<navigation-case>
			<from-outcome>addActionTrue</from-outcome>
			<to-view-id>/visitante/ok.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>addActionFalse</from-outcome>
			<to-view-id>/visitante/erro.jsp</to-view-id>
		</navigation-case>
	</navigation-rule><managed-bean>
		<managed-bean-name>MgrVisitante</managed-bean-name>
		<managed-bean-class>application.MgrVisitante</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
</faces-config>
Marky.Vasconcelos

Coloque no construtor da classe MgrVisitante isso

public MgrVisitante(){
endereco = new Endereco();
visitante = new Visitante();
telefone = new Telefone();
}

Por que se não inicializar esses objetos com certeza o JSF vai ter um NullPointer ao tentar acessar esses objetos.

R

Fiz o construtor mas o erro continua o mesmo, segue abaixo a minha nova classe;

package application;
import domain.Endereco;
import domain.Telefone;
import domain.Visitante;

public class MgrVisitante {
	
	private Endereco endereco;
	private Visitante visitante;
	private Telefone telefone;

	public MgrVisitante(){
		endereco = new Endereco();
		visitante = new Visitante();
		telefone = new Telefone();
	}

	public Endereco getEndereco() {
		return endereco;
	}
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Visitante getVisitante() {
		return visitante;
	}
	public void setVisitante(Visitante visitante) {
		this.visitante = visitante;
	}

	public Telefone getTelefone() {
		return telefone;
	}
	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}
	
	public String addVisitante() {
		String action = null;
	
		if (visitante.getNome().length() >= 2  
			&& telefone.getNumero() > 0  
				&& endereco.getLogradouro().length() >=4) {  
			action = "addActionTrue";  
		}  
		else action = "addActionFalse";  
		return action;  
	}
}

Verificando a mensagem de erro o null exception está na linha 42 application.MgrVisitante.addVisitante(MgrVisitante.java:42)

o que tem na linha 42 é justamente a verificação da classe visitante
if visitante.getNome().length() >= 2

pelo que parece, não está sendo enviada o objeto visitante para a classe managed bean... será que a minha comparação está errada????

R

RESOLVIDO!

Depois de mais de 12 horas tentando eu consegui resolver o meu problema…

faltava colocar managed bean dentro dos jsp… vejam a diferenca dos campos endereco, visitante e telefone.

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib
	uri="http://java.sun.com/jsf/html" prefix="h"%><%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Incluir Visitante</title>
</head>
<body>
<f:view>
	<h:form>
	<h:outputText value="Cadastro de Visitantes"></h:outputText>
	<br>
	Nome   <h:inputText value="#{MgrVisitante.visitante.nome}"></h:inputText><br>
	E-mail <h:inputText value="#{MgrVisitante.visitante.email}"></h:inputText><br>
	
	Data de Nascimento <h:inputText value="#{MgrVisitante.visitante.dataNascimento}"></h:inputText></br>
	Profissão 		   <h:inputText value="#{MgrVisitante.visitante.profissao}"></h:inputText></br>
	Recebe Informativo <h:inputText value="#{MgrVisitante.visitante.recebeInformativo}"></h:inputText></br>
	
	Logradouro  <h:inputText value="#{MgrVisitante.endereco.logradouro}"></h:inputText><br>
	Número 		<h:inputText value="#{MgrVisitante.endereco.numero}"></h:inputText><br>
	Complemento <h:inputText value="#{MgrVisitante.endereco.complemento}"></h:inputText><br>
	CEP 		<h:inputText value="#{MgrVisitante.endereco.cep}"></h:inputText><br>
	Cidade  	<h:inputText value="#{MgrVisitante.endereco.cidade}"></h:inputText><br>
	UF 			<h:inputText value="#{MgrVisitante.endereco.uf}"></h:inputText><br><br>

    <h:commandButton value="addVisitante" action="#{MgrVisitante.addVisitante}"/>

    </h:form>

</f:view>
</body>
</html>

rsrs desse jeito, ainda vou ficar bom em java!
Abraços!

Criado 9 de março de 2008
Ultima resposta 9 de mar. de 2008
Respostas 5
Participantes 3