Erro Jsf

1 resposta
fred_cbranco

Fala galera tudo bem?
Em primeiro lugar gostaria de agradecer a ajuda de todos aqui pois so estou conseguindo andar com o java graças a voces.

Pessoal estou com um probleminha aqui.

bom vamos la fiz o arquivo cadastroConta.jsp

<%@ page 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"%>
<html>
<head>
<title>Cadastro de conta</title>
<link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
<f:view>
<h:form id="frm">
<h1><h:outputText value="Cadastro de conta"/></h1>
<h:messages layout="table" showSummary="true"
showDetail="false" globalOnly="true"
styleClass="msgErro" infoClass="msgInfo"
style="font-weight: bold"/>
<h:panelGrid columns="2">
<h:outputLabel value="Código:"
rendered="#{cadastroContaBean.contaEdicao.id!= null}"/>
<h:panelGroup
rendered="#{cadastroContaBean.contaEdicao.id
!= null}">
<h:inputText id="codigo" size="10"
value="#{cadastroContaBean.contaEdicao.id}"
label="Código da conta" disabled="true"/>
<h:message for="codigo" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:outputLabel value="Pessoa:"/>
<h:panelGroup>
<h:selectOneMenu id="pessoa" value="#{cadastroContaBean.contaEdicao.pessoa}" label="Pessoa" required="true">
<f:selectItems value="#{cadastroContaBean.pessoas}"/>
</h:selectOneMenu>
<h:message for="pessoa" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:outputLabel value="Tipo:"/>
<h:panelGroup>
<h:selectOneRadio id="tipo"
value="#{cadastroContaBean.contaEdicao.tipo}"
label="Tipo da conta" required="true">
<f:selectItems
value="#{cadastroContaBean.tiposLancamentos}"/>
</h:selectOneRadio>
<h:message for="tipo" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:outputLabel value="Descrição:"/>
<h:panelGroup>
<h:inputText id="descricao" size="40"
maxlength="150"
value="#{cadastroContaBean.contaEdicao.descricao}"
required="true" label="Descrição"/>
<h:message for="descricao" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:outputLabel value="Valor:"/>
<h:panelGroup>
<h:inputText id="valor" size="12"
maxlength="10"
value="#{cadastroContaBean.contaEdicao.valor}"
required="true" label="Valor">
<f:convertNumber minFractionDigits="2"/>
</h:inputText>
<h:message for="valor" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:outputLabel value="Data vencimento:"/>
<h:panelGroup>
<h:inputText id="dataVencimento" size="12"
maxlength="10"
value="#{cadastroContaBean.contaEdicao.dataVencimento}" required="true"
label="Data vencimento">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText>
<h:message for="dataVencimento" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:outputLabel value="Data baixa:"/>
<h:panelGroup>
<h:inputText id="dataBaixa" size="12"
maxlength="10"
value="#{cadastroContaBean.contaEdicao.dataBaixa}"
label="Data baixa">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText>
<h:message for="dataBaixa" showSummary="true"
showDetail="false" styleClass="msgErro"/>
</h:panelGroup>
<h:panelGroup/>
<h:panelGroup>
<h:commandButton value="Salvar"
actionListener="#{cadastroContaBean.salvar}"
styleClass="botao"/>
<h:commandButton value="Cancelar" action="menu"
immediate="true" styleClass="botao"/>
</h:panelGroup>
</h:panelGrid>
</h:form>
</f:view>
</body>
</html>

Fiz o bean dele que é o cadastroContaBean:

package com.algaworks.dwjsf.financeiro.visao;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import java.util.ArrayList;
import java.util.List;

import com.algaworks.dwjsf.financeiro.dominio.Conta;
import com.algaworks.dwjsf.financeiro.dominio.Pessoa;
import com.algaworks.dwjsf.financeiro.dominio.TipoConta;
import com.algaworks.dwjsf.financeiro.negocio.ContaService;
import com.algaworks.dwjsf.financeiro.negocio.PessoaService;
import com.algaworks.dwjsf.financeiro.negocio.RegraNegocioException;

public class cadastroContaBean {
	private Conta contaEdicao;
	private List<SelectItem> tiposContas;
	private List<SelectItem> pessoas;
	public String inicializar() {
	this.contaEdicao = new Conta();
	this.tiposContas = null;
	this.pessoas = null;
	return "cadastroConta";
	}
	public void salvar(ActionEvent event) {
	FacesContext context = FacesContext.getCurrentInstance();
	try {
	new ContaService().salvar(this.contaEdicao);
	this.contaEdicao = new Conta();
	FacesMessage msg = new FacesMessage(
	"Conta salva com sucesso!");
	msg.setSeverity(FacesMessage.SEVERITY_INFO);
	context.addMessage(null, msg);
	} catch (RegraNegocioException e) {
	context.addMessage(null,
	new FacesMessage(FacesMessage.SEVERITY_ERROR,
	e.getMessage(), e.getMessage()));
	} catch (Exception e) {
	e.printStackTrace();
	FacesMessage msg = new FacesMessage(
	"Erro inesperado ao salvar conta!");
	msg.setSeverity(FacesMessage.SEVERITY_ERROR);
	context.addMessage(null, msg);
	}
	}
	public List<SelectItem> getPessoas() {
	if (this.pessoas == null) {
	this.pessoas = new ArrayList<SelectItem>();
	List<Pessoa> pessoas = new PessoaService()
	.listarTodas();
	this.pessoas.add(new SelectItem(null, "Selecione"));
	for (Pessoa pessoa : pessoas) {
	this.pessoas.add(new SelectItem(pessoa,
	pessoa.getNome()));
	}
	}
	return this.pessoas;
	}
	public List<SelectItem> getTiposLancamentos() {
	if (this.tiposContas == null) {
	this.tiposContas = new ArrayList<SelectItem>();
	for (TipoConta tipo : TipoConta.values()) {
	this.tiposContas.add(new SelectItem(tipo,
			tipo.toString()));
	}
	}
	return tiposContas;
	}
	public Conta getContaEdicao() {
	return contaEdicao;
	}
	public void setContaEdicao(Conta contaEdicao) {
	this.contaEdicao = contaEdicao;
	}
	}

fiz a configuração no xml do faces:

<managed-bean>
    			<managed-bean-name>cadastroContaBean</managed-bean-name>
    			<managed-bean-class>com.algaworks.dwjsf.financeiro.visao.cadastroContaBean</managed-bean-class>
    			<managed-bean-scope>session</managed-bean-scope>
    		</managed-bean>

Quando clico em salvar ele retorna com este erro:

exception

javax.servlet.ServletException: /contas/cadastroConta.jsp(32,0) '#{cadastroContaBean.contaEdicao.pessoa}' Target Unreachable, 'contaEdicao' returned null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)

root cause

org.apache.jasper.el.JspPropertyNotFoundException: /contas/cadastroConta.jsp(32,0) '#{cadastroContaBean.contaEdicao.pessoa}' Target Unreachable, 'contaEdicao' returned null
org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(MenuRenderer.java:202)
com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:319)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
javax.faces.component.UIInput.validate(UIInput.java:960)
javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
javax.faces.component.UIInput.processValidators(UIInput.java:698)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
javax.faces.component.UIForm.processValidators(UIForm.java:253)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)

Me parece que o erro é nesta linda do arquivo CadastroConta

<h:selectOneMenu id="pessoa" value="#{cadastroContaBean.contaEdicao.pessoa}" label="Pessoa" required="true">

Alguem sabe me dizer onde esta o problema?
Obrigado!

1 Resposta

R

Crie um construtor e instancie nele o que for preciso:

public CadastroContaBean(){
contaEdicao = new ContaEdicao();
}
Criado 28 de março de 2011
Ultima resposta 28 de mar. de 2011
Respostas 1
Participantes 2