SelectOneMenu

7 respostas
M

Ola pessoal bom dia a tds, estou tentando popular um selectOneMenu e estou tendo mta dificuldade,lembrando que sou nova no java
se alguem puder me dar umas dicas fico mto grata bjos

private ArrayList getLista() {    
             lista = new ArrayList();             
            Cliente cliente;              
           IDaoContato idao = new daoContato();  
            ListDataModel   resultado = new ListDataModel(idao.todosClientes());             
            for(int i=0;i<=resultado.getRowCount();i++){   
                resultado.setRowIndex(i);  
                //while(resultado.getRowIndex()>0) {   
               cliente = (Cliente)resultado.getRowData();    
              SelectItem item = new SelectItem(cliente, cliente.getNome());    
              lista.add(item);    
              
          }    
          return lista;    
          }

O que esta de errado aqui eu estou seguindo exemplos que peguei na net ta dando este erro:

javax.servlet.ServletException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(j_id_jsp_1851993840_8).  Found null.  
       javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)  
       org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)  
       org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)  
       org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)  
     
     
   root cause   
     
   java.lang.IllegalArgumentException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(j_id_jsp_1851993840_8).  Found null.

7 Respostas

M

ai gente sera q ninguem aqui nunca populou um selectOneMenu com dados do banco ,q possa me ajudar! :cry: :cry: :cry: :cry: :cry: :cry: :cry:

E

tentou ao inves de usar o método private, usa-lo como public? :roll:

pela descrição do erro, parece-me que quando chega na hora de montar a interface ele não está localizando o objeto da lista :???:

M

ola mto obrigada pela atenção eu ja estava ficando desesperada com este erro, mas eu ja mudei para public e usei genericos mas este erro apareceu:

javax.servlet.ServletException: /FContato.jsp(24,10) '#{contato.lista}' Error reading 'lista' on type control.ControlContato
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


root cause 

org.apache.jasper.el.JspELException: /FContato.jsp(24,10) '#{contato.lista}' Error reading 'lista' on type control.ControlContato
E

hum como é esse seu objeto/classe contato?

o atributo lista está acessivel? (public)

M

contato.java

package model;



import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.persistence.*;

import org.hibernate.Session;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.CascadeType;

import daoContato.IDaoContato;
import daoContato.daoContato;

import Conexao.ConSys;
@Entity @Table(name="contato")
public class Contato {	
	
	@Id
	//@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="codigocontato")
	private int codigoContato;	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="cod_cliente",
	insertable=true, updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)	
	private Cliente cliente;
	private String nome;
	private String sobrenome;
	private String setor;
	private int fone;
	private int ramal;
	private String email;
	public Contato(){}
	public Contato(Cliente cliente, int codigo, String nome, String sobrenome,
			String setor, int fone, int ramal, String email) {		
		this.cliente = cliente;
		this.codigoContato = codigo;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.setor = setor;
		this.fone = fone;
		this.ramal = ramal;
		this.email = email;
	}
	
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getSobrenome() {
		return sobrenome;
	}
	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}
	public String getSetor() {
		return setor;
	}
	public void setSetor(String setor) {
		this.setor = setor;
	}
	public int getFone() {
		return fone;
	}
	public void setFone(int fone) {
		this.fone = fone;
	}
	public int getRamal() {
		return ramal;
	}
	public void setRamal(int ramal) {
		this.ramal = ramal;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;	}
	  
	
	
	public int getCodigoContato() {
		return codigoContato;
	}
	public void setCodigoContato(int codigoContato) {
		this.codigoContato = codigoContato;
	}
	public Cliente getCliente() {
		return cliente;
	}
	
	  

}

daoContato

package daoContato;

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

import javax.faces.model.SelectItem;

import model.Cliente;
import model.Contato;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import Conexao.ConSys;

public class daoContato implements IDaoContato{		

	private Session session;
	public void atualizar(Contato contato) {
		
		Session session = ConSys.getSessionFactory().openSession();
		
		try {
			 session.beginTransaction();
			session.update(contato);
			 session.getTransaction().commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			 session.getTransaction().rollback();
		} finally {
			session.close();
		}
		
		
	}

	public List consultarContato(String Nome) {
		// TODO Auto-generated method stub
		Session session = ConSys.getSessionFactory().openSession();
		Query query =  session.createQuery(
				"from Contato l where l.nome like :nome" );
		List list = query.setString("Nome", "%"+Nome+"%").list();
		
		
		return list;
		
	}

	public void excluir(Contato contato) {
		
		Session session = ConSys.getSessionFactory().openSession();	
		

		try {
			 session.beginTransaction();
			session.delete(contato);
			 session.getTransaction().commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally {
			session.close();
		}
	}

	public void salvar(Contato contato) {
		Session session = ConSys.getSessionFactory().openSession();		
		
		try {			 
			 session.beginTransaction(); 
			 session.save(contato);	
			 session.getTransaction().commit(); 
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally {
			session.close();
		}
		
	}

	public List<Contato> todosContatos() {		
		Session session = ConSys.getSessionFactory().openSession();
		List<Contato> list = session.createQuery("from Contato").list();
		return list;		
	}
	
	public List<Cliente> todosClientes() {		
		Session session = ConSys.getSessionFactory().openSession();
		List<Cliente> list = session.createQuery("from Cliente").list();
		return list;	}	

	


	

}

controlContato

package control;

import java.util.ArrayList;


import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import model.Cliente;
import model.Contato;
import daoContato.IDaoContato;
import daoContato.daoContato;

public class ControlContato {
	
	private DataModel model;
	private Contato contato;
    public ArrayList<SelectItem> lista;
 
	public String novo() {
		this.contato = new Contato();
		return "novo";
	}

	public Contato getContato() {
		return contato;
	}

	public void setCliente(Contato contato) {
		this.contato = contato;
	}

	public DataModel getTodos() {
		IDaoContato ldao = new daoContato();
		model = new ListDataModel(ldao.todosContatos());
		return model;

	}

	public Contato getContatoFromEditOrDelete() {
		Contato contato = (Contato) model.getRowData();
		return contato;

	}

	public String editar() {
		Contato contato = getContatoFromEditOrDelete();
		setCliente(contato);
		return "editar";

	}

	public String update() {
		IDaoContato ldao = new daoContato();
		ldao.atualizar(contato);
		return "sucesso";
	}

	public String excluir() {
		IDaoContato ldao = new daoContato();
		Contato contato = getContatoFromEditOrDelete();
		ldao.excluir(contato);
		return "sucesso";

	}

	public String  create() {
		IDaoContato ldao = new daoContato();
		ldao.salvar(contato);
		return "sucesso_inc";
	}

	// adicionar os itens abaixo como extras
	private String keysearch;

	public String getKeysearch() {
		return keysearch;
	}

	public void setKeysearch(String keysearch) {
		this.keysearch = keysearch;
	}

	public DataModel getBuscarContato() {
		IDaoContato idao = new daoContato();
		model = new ListDataModel(idao.consultarContato(keysearch));
		return model;

	}

	public DataModel getTodosComNome() {
		IDaoContato idao = new daoContato();
		model = new ListDataModel(idao.todosContatos());
		return model;

	}

	public javax.faces.model.DataModel getModel() {
		return model;
	}

	public void setModel(javax.faces.model.DataModel model) {
		this.model = model;
	}
			estava tentando com este metodo
	   /* public ArrayList<SelectItem> getLista() {  
		     lista = new ArrayList<SelectItem>(); 		    
		    Cliente cliente = new Cliente(); 		    
		    IDaoContato idao = new daoContato();
		    ListDataModel	resultado = new ListDataModel(idao.todosClientes());		   
		    for(int i=0;i< resultado.getRowCount();i++){ 		    		    	
		       cliente = (Cliente)resultado.getRowData();  
		       SelectItem item = new SelectItem(cliente, cliente.getNome());  
		       lista.add(item);  
		     
		   }  
		   return lista;  
		   }  */
			
			//agora tou tentando assim
	     private static ArrayList getLista() throws Exception {      
	    	            ArrayList<SelectItem> lista = new ArrayList<SelectItem>();               
	    	            Cliente cliente ;  
	    	             IDaoContato idao = new daoContato();    
	    	             ListDataModel   resultado = new ListDataModel(idao.todosClientes());        
//aqui neste for abaixo ele da um erro : Can only iterate over an array or an instance of java.lang.Iterable
//nao compila por isso tentei usar o for de cima	    	             
	    	             for(Cliente teste : resultado){        
	    	            	// for(int i=0;i< resultado.getRowCount();i++){       
	    	              SelectItem item = new SelectItem(teste.getCodigo(), teste.getNome());  
	    	               
	    	              lista.add(item);      
	    	                
	    	           }      
	    	           return lista;      
	    	         }    
		public void setLista(ArrayList<SelectItem> lista) {
			this.lista = lista;
		}  

}
detalhes:qdo tiro a tag do selectOneMenu com o fselectItems a pagina abre normal no navegador mas qdo nao da este erro:

javax.servlet.ServletException: /FContato.jsp(24,10) ‘#{contato.lista} Error reading lista on type control.ControlContato

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

org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)

org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)

org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

org.apache.jasper.el.JspELException: /FContato.jsp(24,10) ‘#{contato.lista}’ Error reading ‘lista’ on type control.ControlContato

E

hum bom observando a sua classe ContatoControl e tento como base a mensagem:

vi que você definiu o atributo como public ArrayList…

mas desconfio que ali no caso ele não acessa o atributo diretamente mas sim tenta acessalo atraves de seus modificadores:

set & get

ps.: para acessar algo externamente a classe o método deve ser public

to vendo ali private static… mude para public

M

Olá,

Seguinte, você deve criar um converter para esta classe contato.

Para ver como criar, e para que ele serve:
http://www.laliluna.de/javaserver-faces-converter-tutorial.html

=)

Criado 29 de janeiro de 2008
Ultima resposta 16 de fev. de 2008
Respostas 7
Participantes 3