Problema com JSF: Target Unreachable, identifierresolved to null

4 respostas
F

Alguém pode me ajudar a identificar o problema com esse meu código? Já tentei mas não consigo achar o erro.

Classe Bean:
package br.com.caelum.notasfiscais.mb;

import javax.faces.bean.ManagedBean;

import org.primefaces.model.LazyDataModel;

import br.com.caelum.notasfiscais.dao.DAO;
import br.com.caelum.notasfiscais.datamodel.DataModelNotasFiscais;
import br.com.caelum.notasfiscais.modelo.NotaFiscal;

@ManagedBean
public class ListaNotasFiscaisBean {
	
	private LazyDataModel<NotaFiscal> dataModel;
	
	public ListaNotasFiscaisBean(){
		this.dataModel = new DataModelNotasFiscais();
		
		DAO<NotaFiscal> dao = new DAO<NotaFiscal>(NotaFiscal.class);
		this.dataModel.setRowCount(dao.contaTodos());
		this.dataModel.setPageSize(5);
	}

	public LazyDataModel<NotaFiscal> getDataModel() {
		return dataModel;
	}

}
Classe dataModel:
package br.com.caelum.notasfiscais.datamodel;

import java.util.List;
import java.util.Map;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import br.com.caelum.notasfiscais.dao.DAO;
import br.com.caelum.notasfiscais.modelo.NotaFiscal;

public class DataModelNotasFiscais extends LazyDataModel<NotaFiscal> {

	private static final long serialVersionUID = 1L;

	public List<NotaFiscal> load(int inicio, int quantidade,
			String campoOrdenacao, SortOrder sentidoOrdenacao,
			Map<String, String> filtros) {
		DAO<NotaFiscal> dao = new DAO<NotaFiscal>(NotaFiscal.class);
		return dao.listaTodosPaginada(inicio, quantidade);
	}
}
Classe Model:
/**
 * 
 */
package br.com.caelum.notasfiscais.modelo;

//import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * @author Douglas
 *
 */
@Entity
public class NotaFiscal {
	
	@Id
	@GeneratedValue
	private Long id;
	
	private String cnpj;
	
	@Temporal(TemporalType.DATE)
	private Calendar data = Calendar.getInstance();
	
	//private Date data;
	
	@OneToMany(cascade=CascadeType.PERSIST, mappedBy="notaFiscal")
	private List<Item> itens;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public Calendar getData() {
		return data;
	}

	public void setData(Calendar data) {
		this.data = data;
	}
	
	/*public Date getData(){
		return data;
	}
	
	public void setData(Date data){
		this.data = data;
	}*/

	public List<Item> getItens() {
		if(itens == null){
			itens = new ArrayList<Item>();
		}
		return itens;
	}

	public void setItens(List<Item> itens) {
		this.itens = itens;
	}
	
}
Arquivo xhtml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui">

<ui:composition template="/_template.xhtml">
	<ui:define name="corpo">
		<p:dataTable value="#{ListaNotasFiscaisBean.dataModel}"
			var="notaFiscal" paginator="true" rows="5" dynamic="true" lazy="true">
		<p:column headerText="CNPJ">
			#{notaFiscal.cnpj}
		</p:column>

			<p:column headerText="Data">
				<h:outputLabel value="#{notaFiscal.data.time}">
					<f:convertDateTime pattern="dd/MM/yyyy"
						timeZone="America/Sao_Paulo" />
				</h:outputLabel>
			</p:column>
		</p:dataTable>

	</ui:define>
</ui:composition>
</html>
Erro:
description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: /listanotas.xhtml @12,74 value="#{ListaNotasFiscaisBean.dataModel}": Target Unreachable, identifier 'ListaNotasFiscaisBean' resolved to null
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)
root cause

javax.el.PropertyNotFoundException: /listanotas.xhtml @12,74 value="#{ListaNotasFiscaisBean.dataModel}": Target Unreachable, identifier 'ListaNotasFiscaisBean' resolved to null
	com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	org.primefaces.component.datatable.DataTable.isLazy(DataTable.java:968)
	org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:191)
	org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:108)
	javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:883)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1659)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655)
	com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399)
	com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.27 logs.

4 Respostas

H

Faltou colocar o escopo do seu MB.

@SessionScoped ou @RequestScoped ou @ViewScoped

F

jakefrog:
Faltou colocar o escopo do seu MB.

@SessionScoped ou @RequestScoped ou @ViewScoped

Já tentei adicionar os 3 escopos, mas o erro continua

H

Troca de #{ListaNotasFiscaisBean.dataModel} para #{listaNotasFiscaisBean.dataModel}

F

Caramba, era só isso? Não acredito… :oops:

Valeu cara!

Criado 17 de maio de 2012
Ultima resposta 17 de mai. de 2012
Respostas 4
Participantes 2