[RESOLVIDO]Erro EJB

2 respostas
darksteel3000

Olá amigos. Eu estava desenvolvendo uma aplicação com JSF com ajax e richfaces. Dai ontem me caiu a ficha de colocar o EJB também. MAASS… assim que coloquei o arquivo jsf não consegue enxergar a classe de dados e só enxerga o EJB que está no meio. Por exemplo tenho um metodo que me retorna uma lista de coisas. No JSP eu chamo o EJB que faz uma requisição ao meu DAO que por fim o DAO retorna uma List a qual não consigo obter de jeito nenhum no meu JSP. Diz o seguinte erro:

Grave: Servlet.service() for servlet [Faces Servlet] in context with path [/Ideas3] threw exception [/admin/listaSprint.jsp(20,5) '#{not empty sprintBean.sprints }' Error reading 'sprints' on type beans.SprintBean] with root cause.

Mas quando eu coloco o metodo de busca no EJB o JSP recebe os dados. Por isso não entendo, se eu chamo o metodo do DAO ele nem me retorna algo.

Ajudemm !!!

2 Respostas

darksteel3000

Opa, quase me esqueço: Aqui vão minhas classes DAO e EJB + o JSP:

Classe DAO:

package dados;

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

import javax.ejb.Stateless;
import javax.faces.component.UIData;
import javax.faces.event.ValueChangeEvent;

import util.ConexaoMySql;
import basicas.Sprint;
import basicas.Status;

@Stateless
public class SprintDAO {
	
	private Sprint sprint = new Sprint();
	private List<Sprint> sprints = new ArrayList<Sprint>();
	private UIData objDataTableSprint;
	ConexaoMySql con = new ConexaoMySql();

	@SuppressWarnings("static-access")
	public String salvar(Sprint sprint) {
		try {
			
			if(sprint.getId() > 0){
				con.conecta();
				con.executeSql("update sprint set nome = '" + sprint.getNome()
						+ "', descricao = '" + sprint.getDescricao()
						+ "', status = '" + sprint.getStatus()
						+ "' where id = " + sprint.getId());
			}else{
				con.conecta();
				con.executeSql("insert into sprint (nome, descricao, status) values ('"
						+ sprint.getNome()
						+ "', '"
						+ sprint.getDescricao()
						+ "', '" + sprint.getStatus() + "')");
			}
				
			
		} catch (Exception e) {
			System.out.println(e);
		} finally {
			con.fecharCon();
		}
		return null;

	}

//	public String alterar() {
//		sprint = (Sprint) objDataTableSprint.getRowData();
//		return "alterarSprint";
//	}

	//
	// public List<Sprint> listarTodos() {
	// return sprints;
	// }

	public Sprint getSprint() {
		return sprint;
	}

	public void setSprint(Sprint sprint) {
		this.sprint = sprint;
	}
	@SuppressWarnings("static-access")
	public List<Sprint> getSprints() {
		sprints.clear();
		try {
			con.conecta();
			con.rs = con.executeSqlQuery("select * from sprint");
			while (con.rs.next()) {
				sprints.add(new Sprint(con.rs.getInt("id"), con.rs
						.getString("nome"), con.rs.getString("descricao"),
						con.rs.getString("status")));
			}
		} catch (Exception e) {
			System.out.println(e);
		} finally {
			con.fecharCon();
		}
		return sprints;
	}

	public void setSprints(List<Sprint> sprints) {
		this.sprints = sprints;
	}
	
	@SuppressWarnings("static-access")
	public void valueChangeMethod(ValueChangeEvent e, UIData objDataTableSprint) {
		sprint = (Sprint) objDataTableSprint.getRowData();
		System.out.println(sprint.getStatus());
		
		try{
		con.conecta();
		con.executeSql("update sprint set status = '" + e.getNewValue().toString()
				+ "' where id = " + sprint.getId());
		}catch(Exception ex){
			System.out.println(ex);
		}finally{
			con.fecharCon();
		}
	}
	
	public String outcome(){
		return "result";
	}
	
	public String limpar() {
		sprint = new Sprint();
		return null;
	}

}

Classe EJB:

package beans;

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

import javax.ejb.EJB;
import javax.faces.component.UIData;

import javax.faces.event.ValueChangeEvent;

import util.ConexaoMySql;

import dados.SprintDAO;
import basicas.Sprint;
import basicas.Status;

public class SprintBean {

	@EJB
	private SprintDAO sprintDAO;
	private Sprint sprint = new Sprint();
	private UIData objDataTableSprint;
	private List<Sprint> sprints = new ArrayList<Sprint>();

	public String salvar(Sprint sprint) {
		return sprintDAO.salvar(sprint);
	}

	public List<Sprint> getSprints() {
		
		return sprintDAO.getSprints();
	}

	public void setSprints(List<Sprint> sprints) {
		this.sprints = sprints;
	}

	public void valueChangeMethod(ValueChangeEvent e, UIData objDataTableSprint) {
		sprintDAO.valueChangeMethod(e, objDataTableSprint);
	}

	public Sprint getSprint() {
		return sprint;
	}

	public void setSprint(Sprint sprint) {
		this.sprint = sprint;
	}

	public UIData getObjDataTableSprint() {
		return objDataTableSprint;
	}

	public void setObjDataTableSprint(UIData objDataTableSprint) {
		this.objDataTableSprint = objDataTableSprint;
	}

	public String limpar() {
		sprint = new Sprint();
		return null;
	}

	public SprintDAO getSprintDAO() {
		return sprintDAO;
	}

	public void setSprintDAO(SprintDAO sprintDAO) {
		this.sprintDAO = sprintDAO;
	}
}

A PArte do JSP que ele ta mostrando o erro:

<r:dataTable id="sprint" border="1" value="#{sprintBean.sprints }"
						var="s" rendered="#{not empty sprintBean.sprints }" rows="10"
						binding="#{sprintBean.objDataTableSprint }">
darksteel3000

Resolvido Meus Camaradas. Besteira minha, não fiz a instancia da classe DAO direito. Abraçso e obrigado!

Criado 10 de março de 2012
Ultima resposta 10 de mar. de 2012
Respostas 2
Participantes 1