[color=blue]Olá pessoal!! sou novato no Java, e estou com um problema num projeto exercício que estamos fazendo. Quando eu mando rodar no servidor, aparece o seguinte erro:[/color]
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.servlet.ServletException: /contas.jsp(23,3) ‘#{contaPagarHandler.contaPagar.descricao}’ Property ‘contaPagar’ not found on type br.com.caelum.fj26.ContaPagarHandler
br.com.caelum.fj26.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:23)
root cause
javax.servlet.ServletException: /contas.jsp(23,3) ‘#{contaPagarHandler.contaPagar.descricao}’ Property ‘contaPagar’ not found on type br.com.caelum.fj26.ContaPagarHandler
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
br.com.caelum.fj26.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:20)
root cause
org.apache.jasper.el.JspPropertyNotFoundException: /contas.jsp(23,3) ‘#{contaPagarHandler.contaPagar.descricao}’ Property ‘contaPagar’ not found on type br.com.caelum.fj26.ContaPagarHandler
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:104)
javax.faces.component.UIOutput.getValue(UIOutput.java:173)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:189)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:320)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:200)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:833)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:242)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175)
org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:237)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
br.com.caelum.fj26.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:20)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.
Note que ele diz que ele diz: Property ‘contaPagar’ not found on type br.com.caelum.fj26.ContaPagarHandler. Eu já verifiquei o código e está assim:
contas.jsp =========================================================
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j” %>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich” %>
<f:subview id="contas">
<h:form>
<h:panelGrid>
<h:outputText value="Fornecedor"/>
<h:selectOneMenu binding="#{contaPagarHandler.fornecedorSelecionado}">
<f:selectItem itemValue="0" itemLabel="Selecione Fornecedor"/>
<f:selectItems value="#{contaPagarHandler.fornecedoresParaComboBox}" />
</h:selectOneMenu>
<h:outputText value="Descrição"/>
<h:inputText value="#{contaPagarHandler.contaPagar.descricao}"/>
<h:outputText value="Valor"/>
<h:inputText value="#{contaPagarHandler.contaPagar.valor}"/>
<h:selectBooleanCheckbox value="#{contaPagarHandler.contaPagar.pago}">
<h:outputText value="Pago? "/></h:selectBooleanCheckbox>
<h:messages/>
<h:commandButton actionListener="#{contaPagarHandler.salva}" value="gravar"/>
<rich:dataList value="#{contaPagarHandler.contas}" var="conta">
<h:outputText value="#{conta.descricao}"/>
<h:outputText value=" - "/>
<h:outputText value="#{conta.fornecedor.nome}"/>
</rich:dataList>
</h:panelGrid>
</h:form>
</f:subview>
Agora o ContaPagar.java ============================================
package br.com.caelum.fj26.modelo;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class ContaPagar {
@Id
@GeneratedValue
private Long id;
private String descricao;
private Double valor;
@Temporal(TemporalType.DATE)
private Calendar data = new GregorianCalendar();
@ManyToOne
private Fornecedor fornecedor;
private boolean pago;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Double getValor() {
return valor;
}
public void setValor(Double valor) {
this.valor = valor;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
public Fornecedor getFornecedor() {
return fornecedor;
}
public void setFornecedor(Fornecedor fornecedor) {
this.fornecedor = fornecedor;
}
public boolean isPago() {
return pago;
}
public void setPago(boolean pago) {
this.pago = pago;
}
}
Agora o ContaPagarHandler.java =======================================================
package br.com.caelum.fj26;
import java.util.ArrayList;
import java.util.List;
import javax.el.ELContext;
import javax.el.ELResolver;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.hibernate.Session;
import br.com.caelum.fj26.dao.Dao;
import br.com.caelum.fj26.modelo.ContaPagar;
import br.com.caelum.fj26.modelo.Fornecedor;
import br.com.caelum.fj26.util.HibernateUtil;
public class ContaPagarHandler {
private ContaPagar contaPagar = new ContaPagar();
// removida para usar o banco de dados.
// private List contas = new ArrayList();
private HtmlSelectOneMenu fornecedorSelecionado;
public HtmlSelectOneMenu getFornecedorSelecionado() {
return fornecedorSelecionado;
}
public void setFornecedorSelecionado(HtmlSelectOneMenu fornecedorSelecionado) {
this.fornecedorSelecionado = fornecedorSelecionado;
}
// public ContaPagar getContaPagar() {
public List<ContaPagar> getContas() {
Session session = HibernateUtil.currentSession();
Dao<ContaPagar> dao = new Dao<ContaPagar>(session, ContaPagar.class);
return dao.list();
}
private FornecedorHandler pegaFornecedorHandler() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ELResolver resolver = facesContext.getApplication().getELResolver();
Object fh = resolver.getValue(elContext, null, "fornecedorHandler");
return (FornecedorHandler) fh;
}
public List<SelectItem> getFornecedoresParaComboBox() {
List<SelectItem> lista = new ArrayList<SelectItem>();
// usaremos o id como valor e o nome como label para os SelectItem.
FornecedorHandler handler = pegaFornecedorHandler();
for (Fornecedor f : handler.getFornecedores()) {
lista.add(new SelectItem(f.getId(), f.getNome()));
}
return lista;
}
// cria o metodo que grava no ContaPagarHandler a ContaPagar criada dentro
// da sua colecao
public void salva(ActionEvent event) {
System.out.println("gravando conta: " + contaPagar.getDescricao());
System.out.println("pago: " + contaPagar.isPago());
Session session = HibernateUtil.currentSession();
Dao<Fornecedor> fornecedorDao = new Dao<Fornecedor>(session,
Fornecedor.class);
Dao<ContaPagar> contaPagarDao = new Dao<ContaPagar>(session,
ContaPagar.class);
Long id = Long.valueOf(fornecedorSelecionado.getValue().toString());
Fornecedor f = fornecedorDao.load(id);
contaPagar.setFornecedor(f);
System.out.println(contaPagar.getFornecedor().getNome());
contaPagarDao.save(contaPagar);
contaPagar = new ContaPagar();
}
}
Agora o face-config.xml ==========================================================
<?xml version="1.0" encoding="UTF-8"?>
messages
pt
en
autenticador
br.com.caelum.fj26.LoginHandler
session
<managed-bean>
<managed-bean-name>fornecedorHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.FornecedorHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>contaPagarHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.ContaPagarHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/olajsf.jsp</from-view-id>
<navigation-case>
<from-outcome>sucesso</from-outcome>
<to-view-id>/mainpage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
[color=blue]O que pode ser esse erro?? alguem pode me ajudar?? Agradeço a colaboração![/color]