Bom Dia,
Como faço para retornar várias variáveis? Ao inves de fazer isso return varivavel, fazer assim return var1, var2, var3, var4… ???
Tem algum jeito pra isso??
Bom Dia,
Como faço para retornar várias variáveis? Ao inves de fazer isso return varivavel, fazer assim return var1, var2, var3, var4… ???
Tem algum jeito pra isso??
Retorne uma array
Object[] o = { var1, var2, var3 };
return o;
Oi Ellensmp
Para qual finalidade você quer retornar várias variáveis. Lembre-se que Java trabalha com ponteiros. Se você alterar os parâmetros que o seu método recebe, eles serão alterados na classe que a chamou também.
[;)]
Abs.
Oi EllensmpPara qual finalidade você quer retornar várias variáveis. Lembre-se que Java trabalha com ponteiros. Se você alterar os parâmetros que o seu método recebe, eles serão alterados na classe que a chamou também.
[;)]
Abs.
Como assim ponteiros? Seria a mesma coisa que referencia?
Estou fazendo um sisteminha que é o seguinte:
Minha servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String projeto = request.getParameter("projeto");
PrintWriter out = response.getWriter();
out.println("ESSE É O PROJETO QUE EU CLIQUEI: " + projeto);
String results;
ListaProcessos Processos = new ListaProcessos();
results = Processos.Lista(request, projeto);// passa o parametro
request.setAttribute("processosEncontrados", results);
request.getRequestDispatcher("abas.jsp").forward(request, response);
}
Minha classe:
package model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
public class ListaProcessos {
private ConexaoMysql conexaoMysql;
public String Lista(HttpServletRequest request, String projeto){
conexaoMysql = new ConexaoMysql();
Statement state = null;
ResultSet rs = null;
String rc = "";
String descricao = "";
String orcado = "";
String necessidade = "";
String etapa = "";
String etapaAux = "";
String prevEtapa = "";
String processo = "";
try {
state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = state.executeQuery("Select * from processos inner join projeto on (processos.FKProjeto = projeto.idProjeto) where projeto.nome = '"+projeto+"'");
while (rs.next()) {
processo += rs.getString("processo") + "#";
rc += rs.getString("RC") + "#";
descricao += rs.getString("descricao") + "#";
orcado += rs.getString("orcado") + "#";
necessidade += rs.getString("necessidadeCliente") + "#";
//etapa += rs.getString("processo") + "#"; //Esse valor terá que ser realizado através de código.
prevEtapa += rs.getString("prevTermEtapaAtual") + "#";
// INICIO OTIMIZAR ISSO
if (rs.getString("real_inicioProcesso") != null && rs.getString("real_inicioProcesso")!= ""){
etapaAux = "Início Processo#";
if (rs.getString("real_envioColeta") != null && rs.getString("real_envioColeta") != ""){
etapaAux = "Envio Coleta#";
}
if (rs.getString("real_esclarecimento") != null && rs.getString("real_esclarecimento") != ""){
etapaAux = "Esclarecimento Técnico#";
}
if (rs.getString("real_rectoPropostas") != null && rs.getString("real_rectoPropostas") != ""){
etapaAux = "Recebimento de Propostas#";
}
if (rs.getString("real_analiseTecnica") != null && rs.getString("real_analiseTecnica") != ""){
etapaAux = "Análise Técnica#";
}
if (rs.getString("real_negocComercial") != null && rs.getString("real_negocComercial") != ""){
etapaAux = "Negociação Comercial#";
}
if (rs.getString("real_homologacao") != null && rs.getString("real_homologacao") != ""){
etapaAux = "Homologação#";
}
if (rs.getString("real_aprovGAGG") != null && rs.getString("real_aprovGAGG") != ""){
etapaAux = "Aprov. GA/GG#";
}
if (rs.getString("real_aprovDIPL") != null && rs.getString("real_aprovDIPL") != ""){
etapaAux = "Aprov. DIPL#";
}
if (rs.getString("real_aprovDEEB") != null && rs.getString("real_aprovDEEB") != ""){
etapaAux = "Aprov. DEEB#";
}
if (rs.getString("real_aprovUsuario") != null && rs.getString("real_aprovUsuario") != ""){
etapaAux = "Aprov. Usuário#";
}
if (rs.getString("real_pautaDE") != null && rs.getString("real_pautaDE") != ""){
etapaAux = "Pauta DE#";
}
if (rs.getString("real_reuniaoDE") != null && rs.getString("real_reuniaoDE") != ""){
etapaAux = "Reunião DE#";
}
if (rs.getString("real_emitirDDE") != null && rs.getString("real_emitirDDE") != ""){
etapaAux = "Emissão DDE#";
}
if (rs.getString("real_emissaoContrato") != null && rs.getString("real_emissaoContrato") != ""){
etapaAux = "Emissão Contrato#";
}
} else {
etapaAux = "Não Iniciado#";
}
// FIM OTIMIZAR ISSO
System.out.println("Processo: " + processo + " RC: " + rc + " Descrição: " + descricao + " Orçado: " + orcado + " NecessidadeCliente: " +necessidade+ " Etapa: "+etapa+" prevTermEtapa " +prevEtapa);
System.out.println("<br><br>");
etapa += etapaAux;
System.out.println("Etapa: " + etapa);
System.out.println("<br><br>");
}//fim while
} catch(Exception erro) {
System.out.println("Erro ocorrido na classe ListaProcessos: n" + erro);
} finally {
if(state != null){ //fechar os statments
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return etapa;
}
}
Seria ideal devolver um string?
Bom, neste caso, acho que você pode trabalhar retornando uma lista de objetos.
Por exemplo, você cria um objeto que tem todas os atributos (variáveis que você precisa retornar).
Exemplo:
public class EtapaBean {
// Não se esqueça dos getters e setters
private String rc = "";
private String descricao = "";
private String orcado = "";
private String necessidade = "";
private String etapa = "";
private String etapaAux = "";
private String prevEtapa = "";
private String processo = "";
}
Então, no return, você vai usar:
public List<EtapaBean> Lista(HttpServletRequest request, String projeto){
Para manipular esta Lista:
Primeiro, você instancia ela, depois para cada item você cria um objeto novo:
// Instancia a lista
List<EtapaBean> list = new ArrayList<EtapaBean>();
while (rs.next()) {
EtapaBean etapaBean = new EtapaBean();
etapaBean.setProcesso(rs.getString("processo"));
// Depois faz o mesmo para atribuir os outros valores.
// Inclui o item na lista
list.add(etapaBean);
}
Depois você dá um return list.
Para pegar os valores do list, voce usa list.get(index);
E daí atribui sempre a um objeto EtapaBean.
Por exemplo:
EtapaBean etapaBean = list.get(2);
Pra saber a quantidade de ítens tem o método size do list…
E ai vai… Tem bastante coisa pra você brincar ai.
Se você quiser retornar só um objeto, ai mud no return.
Qualquer coisa, é só perguntar.
Abs.
Bom, neste caso, acho que você pode trabalhar retornando uma lista de objetos.
Por exemplo, você cria um objeto que tem todas os atributos (variáveis que você precisa retornar).Exemplo:
public class EtapaBean { // Não se esqueça dos getters e setters private String rc = ""; private String descricao = ""; private String orcado = ""; private String necessidade = ""; private String etapa = ""; private String etapaAux = ""; private String prevEtapa = ""; private String processo = ""; }Então, no return, você vai usar:
public List<EtapaBean> Lista(HttpServletRequest request, String projeto){Para manipular esta Lista:
Primeiro, você instancia ela, depois para cada item você cria um objeto novo:// Instancia a lista List<EtapaBean> list = new ArrayList<EtapaBean>(); while (rs.next()) { EtapaBean etapaBean = new EtapaBean(); etapaBean.setProcesso(rs.getString("processo")); // Depois faz o mesmo para atribuir os outros valores. // Inclui o item na lista list.add(etapaBean); }Depois você dá um return list. Para pegar os valores do list, voce usa list.get(index); E daí atribui sempre a um objeto EtapaBean. Por exemplo: EtapaBean etapaBean = list.get(2);Pra saber a quantidade de ítens tem o método size do list…
E ai vai… Tem bastante coisa pra você brincar ai.Se você quiser retornar só um objeto, ai mud no return.
Qualquer coisa, é só perguntar.Abs.
O que é esse EtapaBean???
O que vc quis dizer com :
// Instancia a lista
List<EtapaBean> list = new ArrayList<EtapaBean>();
e com:
public List<EtapaBean> Lista(HttpServletRequest request, String projeto){
Se esse EtapaBean for algo a ver com EJB não posso utilizar, o Tomcat não dá suporte
Esse list é do:
import java.util.ArrayList;
import java.util.List;
?
Sim são desse pacote, e você pode adicionar o que você queira nesse objeto e depois retorná-lo,
lembre-se que existe vários tipos de armazenamento que extends a classe List, dependendo do que
você está querendo ou a forma com que você quer que os dados sejam retornados você pode utilizar
outros tipos de instància não somente ArrayList.
Sim são desse pacote, e você pode adicionar o que você queira nesse objeto e depois retorná-lo,
lembre-se que existe vários tipos de armazenamento que extends a classe List, dependendo do que
você está querendo ou a forma com que você quer que os dados sejam retornados você pode utilizar
outros tipos de instància não somente ArrayList.
Esta dando erro quando eu faço o seguinte:
List
Mas é preciso fazer.
List<nomeDeAlgumaClass> obj = new ArrayList<nomeDaMesmaClass>();
Mas é preciso fazer.
List<nomeDeAlgumaClass> obj = new ArrayList<nomeDaMesmaClass>();
Verdade, agora parou de dar erro. Mas qual deveria ser essa classe?
A classe que eu quero que receba os valores, da classe que estou utilizando o list?
É a class do tipo que você quer que sejam armazenados os dados.
ex simples.
Quero armzenar vários números inteiro de 1…10.
// instancio a class usando array list para isso
List<Integer> obj = new ArrayList<Integer>();
// aqui estou armazenando o tipo de dado que eu quero
// todos os dados são da class Integer, ou seja, números inteiros
for (int i = 0; i < 10; i++)
obj.add(i);
// exibo os dados inseridos
for (int i = 0; i < 10; i++)
System.out.println(i + ": " + obj.get(i));
Você pode armazenar os dados do tipo da classe que você instanciou, e quando você instancia
somente aquele tipo de dado pode ser armazenado no objeto.
É a class do tipo que você quer que sejam armazenados os dados.ex simples.
Quero armzenar vários números inteiro de 1…10.
// instancio a class usando array list para isso List<Integer> obj = new ArrayList<Integer>(); // aqui estou armazenando o tipo de dado que eu quero // todos os dados são da class Integer, ou seja, números inteiros for (int i = 0; i < 10; i++) obj.add(i); // exibo os dados inseridos for (int i = 0; i < 10; i++) System.out.println(i + ": " + obj.get(i));Você pode armazenar os dados do tipo da classe que você instanciou, e quando você instancia
somente aquele tipo de dado pode ser armazenado no objeto.
Entao vê se eu entendi corretamente:
entao eu tenho a classe ListaProcessos e é nela que estou utilizando o list, e a servlet Processos que esta recebendo os valores do list. Logo devo fazer assim:
Classe ListaProcessos
public class ListaProcessos {
private ConexaoMysql conexaoMysql;
public List<ListaProcessos> Lista(HttpServletRequest request, String projeto){
Servlet Processos
List results;
ListaProcessos Processos = new ListaProcessos();
results = Processos.Lista(request, projeto);// passa o parametro
request.setAttribute("processosEncontrados", results);
request.getRequestDispatcher("abas.jsp").forward(request, response);
???
Olha se você fizer isto:
List<ListaProcessos> obj = new ArrayList<ListaProcessos>();
Você estará querendo armarzenar vários objetos dessa classe na lista(obj).
Bem o que é que você está querendo retornar com esse método?
Olha se você fizer isto:List<ListaProcessos> obj = new ArrayList<ListaProcessos>();Você estará querendo armarzenar vários objetos dessa classe na lista(obj).
Bem o que é que você está querendo retornar com esse método?
To querendo retornar os resultados da query para a servlet e a servlet manda para o jsp:
try {
state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = state.executeQuery("Select * from processos inner join projeto on (processos.FKProjeto = projeto.idProjeto) where projeto.nome = '"+projeto+"'");
while (rs.next()) {
processo += rs.getString("processo") + "#";
rc += rs.getString("RC") + "#";
descricao += rs.getString("descricao") + "#";
orcado += rs.getString("orcado") + "#";
necessidade += rs.getString("necessidadeCliente") + "#";
//etapa += rs.getString("processo") + "#"; //Esse valor terá que ser realizado através de código.
prevEtapa += rs.getString("prevTermEtapaAtual") + "#";
// INICIO OTIMIZAR ISSO
if (rs.getString("real_inicioProcesso") != null && rs.getString("real_inicioProcesso")!= ""){
etapaAux = "Início Processo#";
if (rs.getString("real_envioColeta") != null && rs.getString("real_envioColeta") != ""){
etapaAux = "Envio Coleta#";
}
if (rs.getString("real_esclarecimento") != null && rs.getString("real_esclarecimento") != ""){
etapaAux = "Esclarecimento Técnico#";
}
if (rs.getString("real_rectoPropostas") != null && rs.getString("real_rectoPropostas") != ""){
etapaAux = "Recebimento de Propostas#";
}
if (rs.getString("real_analiseTecnica") != null && rs.getString("real_analiseTecnica") != ""){
etapaAux = "Análise Técnica#";
}
if (rs.getString("real_negocComercial") != null && rs.getString("real_negocComercial") != ""){
etapaAux = "Negociação Comercial#";
}
if (rs.getString("real_homologacao") != null && rs.getString("real_homologacao") != ""){
etapaAux = "Homologação#";
}
if (rs.getString("real_aprovGAGG") != null && rs.getString("real_aprovGAGG") != ""){
etapaAux = "Aprov. GA/GG#";
}
if (rs.getString("real_aprovDIPL") != null && rs.getString("real_aprovDIPL") != ""){
etapaAux = "Aprov. DIPL#";
}
if (rs.getString("real_aprovDEEB") != null && rs.getString("real_aprovDEEB") != ""){
etapaAux = "Aprov. DEEB#";
}
if (rs.getString("real_aprovUsuario") != null && rs.getString("real_aprovUsuario") != ""){
etapaAux = "Aprov. Usuário#";
}
if (rs.getString("real_pautaDE") != null && rs.getString("real_pautaDE") != ""){
etapaAux = "Pauta DE#";
}
if (rs.getString("real_reuniaoDE") != null && rs.getString("real_reuniaoDE") != ""){
etapaAux = "Reunião DE#";
}
if (rs.getString("real_emitirDDE") != null && rs.getString("real_emitirDDE") != ""){
etapaAux = "Emissão DDE#";
}
if (rs.getString("real_emissaoContrato") != null && rs.getString("real_emissaoContrato") != ""){
etapaAux = "Emissão Contrato#";
}
} else {
etapaAux = "Não Iniciado#";
}
// FIM OTIMIZAR ISSO
System.out.println("Processo: " + processo + " RC: " + rc + " Descrição: " + descricao + " Orçado: " + orcado + " NecessidadeCliente: " +necessidade+ " Etapa: "+etapa+" prevTermEtapa " +prevEtapa);
System.out.println("<br><br>");
etapa += etapaAux;
System.out.println("Etapa: " + etapa);
System.out.println("<br><br>");
}//fim while
Essa linha do while esta dando erro por causa do setProcessos.
etapaBean.setProcessos(rs.getString("processo"));
Se eu fiz isso:
ListaProcessos etapaBean = new ListaProcessos();
Teria que ser um metodo do ListaProcessos, isso eu não entendi
Ah, então se você criar uma lista de ListaProcessos você irá armazenar vários objetos dessa classe, e cada objeto
conterá resultados diferentes.
public List<ListaProcessos> getProcessos( /* parametos */ ) {
// crio a lista que irá armazenar os objetos
List<ListaProcessos> list = new ArrayList<ListaProcessos>();
// crio os objetos que serão armazenados na lista
ListaProcessos processo1 = new ListaProcessos();
ListaProcessos processo2 = new ListaProcessos();
ListaProcessos processo3 = new ListaProcessos();
// adiciono os objetos na lista
list.add(processo1);
list.add(processo2);
list.add(processo3);
// retorno a lista contendo os vários tipos de processos diferentes
return list;
Para recuperar os processos use:
List<ListaProcessos> list = getProcessos( /* parametros */ );
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i)); // chamando o método toString(), se tiver na classe ListaProcessos
Então esse é um exemplo de como você pode fazer.
No seu método se o parâmetro passado contiver vários tipos de processos você crie uma objeto da classe ListaProcesso,
e também crie um loop que execute até que capture todos os processos passados e adicione na lista.
Ah, então se você criar uma lista de ListaProcessos você irá armazenar vários objetos dessa classe, e cada objeto
conterá resultados diferentes.public List<ListaProcessos> getProcessos( /* parametos */ ) { // crio a lista que irá armazenar os objetos List<ListaProcessos> list = new ArrayList<ListaProcessos>(); // crio os objetos que serão armazenados na lista ListaProcessos processo1 = new ListaProcessos(); ListaProcessos processo2 = new ListaProcessos(); ListaProcessos processo3 = new ListaProcessos(); // adiciono os objetos na lista list.add(processo1); list.add(processo2); list.add(processo3); // retorno a lista contendo os vários tipos de processos diferentes return list;Para recuperar os processos use:
List<ListaProcessos> list = getProcessos( /* parametros */ ); for (int i = 0; i < list.size(); i++) System.out.println(list.get(i)); // chamando o método toString(), se tiver na classe ListaProcessosEntão esse é um exemplo de como você pode fazer.
No seu método se o parâmetro passado contiver vários tipos de processos você crie uma objeto da classe ListaProcesso,
e também crie um loop que execute até que capture todos os processos passados e adicione na lista.
Porque que eu tenho que fazer assim?
public List<ListaProcessos> getProcessos( /* parametos */ ) {
O que é esse getProcesso? Realmente necessário?
Não posso fazer algo do tipo:
while (rs.next()) {
etapaBean.setProcessos(rs.getString("processo"));
???
Então… Você pode até tentar usar o meu código que fiz em cima do seu.
É que é assim, pelo que entendi você não só quer enviar vários dados, como vários dados de processos diferentes (pelo que entendi).
Em java, o ideal é criar um objeto pra armazenar e até tratar todos os dados da entidades, no seu caso processo.
Como fiz ali em cima, você criaria uma classe ProcessoBean ou EtapaBean que tivesse todas os dados ou “variáveis” (atributos) relacionados ao seu processo (que são rc, descricao, orcado, necessidade, etapa, etc…). Ai você tem seu Processo.
Pelo que entendi, o seu método (ou função) Lista vai retornar dados sobre vários processos. Então você retorna “os processos” numa “lista”, entendeu?!
Se você colar o código como passei no inicio (exatamentente igual) alterando só o que disse, vai funcionar.
Abs.
Ah! Esqueci de perguntar… Hellen, você já entendeu o conceito dos getters e setters e por que deles?
Ali em cima, o erro que poderia dar no código que você passou ou é que ele não encontrou o campo “processo” no retorno da sua select (vc pode testala direto no banco pra ver se retorna) ou o método setProcessos não existe na sua classe do etapaBean.
Então… Você pode até tentar usar o meu código que fiz em cima do seu.
É que é assim, pelo que entendi você não só quer enviar vários dados, como vários dados de processos diferentes (pelo que entendi).Em java, o ideal é criar um objeto pra armazenar e até tratar todos os dados da entidades, no seu caso processo.
Como fiz ali em cima, você criaria uma classe ProcessoBean ou EtapaBean que tivesse todas os dados ou “variáveis” (atributos) relacionados ao seu processo (que são rc, descricao, orcado, necessidade, etapa, etc…). Ai você tem seu Processo.Pelo que entendi, o seu método (ou função) Lista vai retornar dados sobre vários processos. Então você retorna “os processos” numa “lista”, entendeu?!
Se você colar o código como passei no inicio (exatamentente igual) alterando só o que disse, vai funcionar.
Abs.
Vou ter vários processos diferentes com seus atributos diferentes (rc, descricao, orcado, necessidade, etapa, etc…).
Não funciona essa linha etapaBean.setProcessos(rs.getString("processo"));
Qual o erro?
Ah! Esqueci de perguntar… Hellen, você já entendeu o conceito dos getters e setters e por que deles?
Ali em cima, o erro que poderia dar no código que você passou ou é que ele não encontrou o campo “processo” no retorno da sua select (vc pode testala direto no banco pra ver se retorna) ou o método setProcessos não existe na sua classe do etapaBean.
Para questões de acesso esse getters e setters neh?!
O metodo setProcessos não existe na minha classe!
Aliás, posso ver como está seu código agora? Assim posso entender melhor o que foi feito…
Assim as vezes posso enxergar melhor o erro…
Ah! Eu uso esse list nas minhas aplicações e o TomCat tbm e sempre funcionaram muito bem.

Abs.
Estou tentando chamar um metodo que nao existe:
package model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
public class ListaProcessos {
private ConexaoMysql conexaoMysql;
public List<ListaProcessos> Lista(HttpServletRequest request, String projeto){
conexaoMysql = new ConexaoMysql();
Statement state = null;
ResultSet rs = null;
String rc = "";
String descricao = "";
String orcado = "";
String necessidade = "";
String etapa = "";
String etapaAux = "";
String prevEtapa = "";
//List o;
String processo = "";
// Instance a lista
List<ListaProcessos> list = new ArrayList<ListaProcessos>();
ListaProcessos etapaBean = new ListaProcessos();
try {
state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = state.executeQuery("Select * from processos inner join projeto on (processos.FKProjeto = projeto.idProjeto) where projeto.nome = '"+projeto+"'");
while (rs.next()) {
etapaBean.setProcessos(rs.getString("processo")); //AQUI QUE DÁ O ERRO!!!! >>THE METHOD SETPROCESSOS(STRING) IS UNDEFINED FOR THE TYPE LISTAPROCESSOS
//processo += rs.getString("processo") + "#";
//etapaBean.equals(rs.getString("processo") + "#");
//System.out.println();
//etapaBean = rs.getString("processo") + "#";
// Depois faz o mesmo para atribuir os outros valores.
// Inclui o item na lista
list.add(etapaBean);
}
/* while (rs.next()) {
processo += rs.getString("processo") + "#";
rc += rs.getString("RC") + "#";
descricao += rs.getString("descricao") + "#";
orcado += rs.getString("orcado") + "#";
necessidade += rs.getString("necessidadeCliente") + "#";
//etapa += rs.getString("processo") + "#"; //Esse valor terá que ser realizado através de código.
prevEtapa += rs.getString("prevTermEtapaAtual") + "#";
// INICIO OTIMIZAR ISSO
if (rs.getString("real_inicioProcesso") != null && rs.getString("real_inicioProcesso")!= ""){
etapaAux = "Início Processo#";
if (rs.getString("real_envioColeta") != null && rs.getString("real_envioColeta") != ""){
etapaAux = "Envio Coleta#";
}
if (rs.getString("real_esclarecimento") != null && rs.getString("real_esclarecimento") != ""){
etapaAux = "Esclarecimento Técnico#";
}
if (rs.getString("real_rectoPropostas") != null && rs.getString("real_rectoPropostas") != ""){
etapaAux = "Recebimento de Propostas#";
}
if (rs.getString("real_analiseTecnica") != null && rs.getString("real_analiseTecnica") != ""){
etapaAux = "Análise Técnica#";
}
if (rs.getString("real_negocComercial") != null && rs.getString("real_negocComercial") != ""){
etapaAux = "Negociação Comercial#";
}
if (rs.getString("real_homologacao") != null && rs.getString("real_homologacao") != ""){
etapaAux = "Homologação#";
}
if (rs.getString("real_aprovGAGG") != null && rs.getString("real_aprovGAGG") != ""){
etapaAux = "Aprov. GA/GG#";
}
if (rs.getString("real_aprovDIPL") != null && rs.getString("real_aprovDIPL") != ""){
etapaAux = "Aprov. DIPL#";
}
if (rs.getString("real_aprovDEEB") != null && rs.getString("real_aprovDEEB") != ""){
etapaAux = "Aprov. DEEB#";
}
if (rs.getString("real_aprovUsuario") != null && rs.getString("real_aprovUsuario") != ""){
etapaAux = "Aprov. Usuário#";
}
if (rs.getString("real_pautaDE") != null && rs.getString("real_pautaDE") != ""){
etapaAux = "Pauta DE#";
}
if (rs.getString("real_reuniaoDE") != null && rs.getString("real_reuniaoDE") != ""){
etapaAux = "Reunião DE#";
}
if (rs.getString("real_emitirDDE") != null && rs.getString("real_emitirDDE") != ""){
etapaAux = "Emissão DDE#";
}
if (rs.getString("real_emissaoContrato") != null && rs.getString("real_emissaoContrato") != ""){
etapaAux = "Emissão Contrato#";
}
} else {
etapaAux = "Não Iniciado#";
}
// FIM OTIMIZAR ISSO
System.out.println("Processo: " + processo + " RC: " + rc + " Descrição: " + descricao + " Orçado: " + orcado + " NecessidadeCliente: " +necessidade+ " Etapa: "+etapa+" prevTermEtapa " +prevEtapa);
System.out.println("<br><br>");
etapa += etapaAux;
System.out.println("Etapa: " + etapa);
System.out.println("<br><br>");
}//fim while */
} catch(Exception erro) {
System.out.println("Erro ocorrido na classe ListaProcessos: n" + erro);
} finally{
if(state != null){ //fechar os statments
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list;
}
}
Aliás, posso ver como está seu código agora? Assim posso entender melhor o que foi feito…Assim as vezes posso enxergar melhor o erro…
Ah! Eu uso esse list nas minhas aplicações e o TomCat tbm e sempre funcionaram muito bem.
Abs.
Sim, eu não tinha entendido que o EtapaBean era era o nome da classe que iria fazer o list pensei que fosse algo a ver com EJB e o tomcat não suporta EJB.
Bom, vamos lá… Vou explicando e qualquer coisa que não entender você pergunta…
Primeiro, esquece essas váriáveis com os dados dos seus processos
String rc = "";
String descricao = "";
String orcado = "";
String necessidade = "";
String etapa = "";
String etapaAux = "";
String prevEtapa = "";
Pode apaga-las. Vamos criar, como disse, uma classe chamada Processo que vai tratar estes atributos ou variáveis.
Então vai ficar assim:
public class Processo {
private String rc = "";
private String descricao = "";
private String orcado = "";
private String necessidade = "";
private String etapa = "";
private String etapaAux = "";
private String prevEtapa = "";
public void setRc(String rc){
this.rc = rc;
}
public String getRc(){
return this.rc;
}
// Aqui você coloca os getters em setters dos outros atributos, como descrição etc.
}
Os getters e setters funcionam assim:
Quando você declara um atributo como private, que fizemos, só os métodos desta classe podem acessa-los.
Então, pra você acessa-los (alterar ou só acessa-lo) você acessa o método.
Então, vamos usar assim:
Processo processo = new Processo();
Ok, criamos o processo. Para alterar seus dados:
processo.setRec(“dado da rec”);
Para acessar:
String acesso = processo.getRc();
Até aqui tudo bem?
Bom, vamos lá… Vou explicando e qualquer coisa que não entender você pergunta…Primeiro, esquece essas váriáveis com os dados dos seus processos
String rc = ""; String descricao = ""; String orcado = ""; String necessidade = ""; String etapa = ""; String etapaAux = ""; String prevEtapa = "";Pode apaga-las. Vamos criar, como disse, uma classe chamada Processo que vai tratar estes atributos ou variáveis.
Então vai ficar assim:public class Processo { private String rc = ""; private String descricao = ""; private String orcado = ""; private String necessidade = ""; private String etapa = ""; private String etapaAux = ""; private String prevEtapa = ""; public void setRc(String rc){ this.rc = rc; } public String getRc(){ return this.rc; } // Aqui você coloca os getters em setters dos outros atributos, como descrição etc. }Os getters e setters funcionam assim:
Quando você declara um atributo como private, que fizemos, só os métodos desta classe podem acessa-los.
Então, pra você acessa-los (alterar ou só acessa-lo) você acessa o método.Então, vamos usar assim:
Processo processo =
new Processo();Ok, criamos o processo. Para alterar seus dados:
processo.setRec(“dado da rec”);Para acessar:
String acesso =processo.getRc();Até aqui tudo bem?
Acho que entendi. Vou fazer isso para todos os outros ‘campos’ (descricao, orcado, necessidade, etapa, etapaAux, prevEtapa)
public void setRc(String rc){
this.rc = rc;
}
public String getRc(){
return this.rc;
}
Minha Servlet Processos:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String projeto = request.getParameter("projeto");
PrintWriter out = response.getWriter();
out.println("ESSE É O PROJETO QUE EU CLIQUEI: " + projeto);
List results;
ListaProcessos Processos = new ListaProcessos();
results = Processos.Lista(request, projeto);// passa o parametro
request.setAttribute("processosEncontrados", results);
request.getRequestDispatcher("abas.jsp").forward(request, response);
}
Minha Classe ListaProcessos:
package model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
public class ListaProcessos {
private ConexaoMysql conexaoMysql;
public class Lista {
private String rc = "";
private String descricao = "";
private String orcado = "";
private String necessidade = "";
private String etapa = "";
private String etapaAux = "";
private String prevEtapa = "";
public void setRc(String rc){
this.rc = rc;
}
public String getRc(){
return this.rc;
}
// Aqui você coloca os getters em setters dos outros atributos, como descrição etc.
}
Não tem como eu fazer algo do tipo não:
String[] obj = {processo, rc, descricao};
list.add(obj);
Isso mesmo… Por exemplo, descrição vai ficar assim:
public void setDescricao(String descricao){
this.descricao = descricao;
}
public String getDescricao(){
return this.descricao;
}
Dependendo da IDE que vc estiver utilizando (NetBeans ou Eclipse) qnd vc cria o atributo, ao colocar o ponto e vírgula, ele coloca aquela lampadinha do lado perguntando se você já não quer que ele crie o get e o set pra vc…
A sua classe, eu vou reescrevendo aqui e te explicando…
Eu vou escrever todo o código … Só um minuto…
ok
Primeira classe (no mesmo pacote)
Só clica com o botão direito do mouse no pacote e new class (Dependendo da ide q vc estiver usando):
package model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class Processo {
private String rc;
private String descricao;
private String orcado;
private String necessidade;
private String etapa;
private String etapaAux;
private String prevEtapa;
public void setRc(String rc){
this.rc = rc;
}
public String getRc(){
return this.rc;
}
public void setDescricao(String descricao){
this.descricao = descricao;
}
public String getDescricao(){
return this.descricao;
}
public void setOrcado(String orcado){
this.orcado = orcado;
}
public String getOrcado(){
return this.orcado;
}
public void setNecessidade(String necessidade){
this.necessidade = necessidade;
}
public String getNecessidade(){
return this.necessidade;
}
public void setEtapa(String etapa){
this.etapa = etapa;
}
public String getEtapa(){
return this.etapa;
}
public void setEtapaAux(String etapaAux){
this.etapaAux = etapaAux;
}
public String getEtapaAux(){
return this.etapaAux;
}
public void setPrevEtapa(String prevEtapa){
this.prevEtapa = prevEtapa;
}
public String getPrevEtapa(){
return this.prevEtapa;
}
}
Estou escrevendo as outras… vai colando essa…
Primeira classe (no mesmo pacote)
Só clica com o botão direito do mouse no pacote e new class (Dependendo da ide q vc estiver usando):package model; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class Processo { private String rc; private String descricao; private String orcado; private String necessidade; private String etapa; private String etapaAux; private String prevEtapa; public void setRc(String rc){ this.rc = rc; } public String getRc(){ return this.rc; } public void setDescricao(String descricao){ this.descricao = descricao; } public String getDescricao(){ return this.descricao; } public void setOrcado(String orcado){ this.orcado = orcado; } public String getOrcado(){ return this.orcado; } public void setNecessidade(String necessidade){ this.necessidade = necessidade; } public String getNecessidade(){ return this.necessidade; } public void setEtapa(String etapa){ this.etapa = etapa; } public String getEtapa(){ return this.etapa; } public void setEtapaAux(String etapaAux){ this.etapaAux = etapaAux; } public String getEtapaAux(){ return this.etapaAux; } public void setPrevEtapa(String prevEtapa){ this.prevEtapa = prevEtapa; } public String getPrevEtapa(){ return this.prevEtapa; } }Estou escrevendo as outras… vai colando essa…
Estou utilizando o eclipse
Ah, acabei de ver… Faltou um atributo… Inclui nessa classe:
private String processo;
public void setProcesso(String processo){
this.processo = processo;
}
public String getProcesso(){
return this.processo;
}
… Estou escrevendo as outras… dois minutos
Ah, acabei de ver… Faltou um atributo… Inclui nessa classe:private String processo; public void setProcesso(String processo){ this.processo = processo; } public String getProcesso(){ return this.processo; }… Estou escrevendo as outras… dois minutos
Ok… O “#” no final das variavéis é para pegar os registros em uma só variavel e dpois separa-las no meu jsp com o metodo split, evitando de usar vetor pois a performance para este sistema é importante. Ex.:
rc += rs.getString("RC") + "#";
descricao += rs.getString("descricao") + "#";
orcado += rs.getString("orcado") + "#";
necessidade += rs.getString("necessidadeCliente") + "#";
Então… você não precisa usar esse split no seu jsp se vc já possuir os dados em atributos distintos. O ideal é você sempre enviar pro jsp tudo mastigado.
Por que disso: o jsp usa da performance da máquina do cliente. Já as suas classes ficam no servidor e usam o processamento dele, que muitas vezes é superior e as vezes só roda aplicações então tem memória pra isso…
Segue a outra classe… Falta o último método que é do seu servlet…
package model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
public class ListaProcessos {
private ConexaoMysql conexaoMysql;
public List<Processo> Lista(HttpServletRequest request, String projeto){
conexaoMysql = new ConexaoMysql();
Statement state = null;
ResultSet rs = null;
List<Processo> list = new ArrayList<Processo>();
Processo processo;
try {
state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = state.executeQuery("Select * from processos inner join projeto on (processos.FKProjeto = projeto.idProjeto) where projeto.nome = '"+projeto+"'");
while (rs.next()) {
// Cria um novo processo a ser incluso na lista
processo = new Processo();
processo.setProcesso (rs.getString("processo"));
processo.setRc (rs.getString("RC"));
processo.setDescricao (rs.getString("descricao"));
processo.setOrcado (rs.getString("orcado"));
processo.setNecessidade(rs.getString("necessidadeCliente"));
processo.setPrevEtapa (rs.getString("prevTermEtapaAtual"));
// Inclui o item na lista
list.add(processo);
}
} catch(Exception erro) {
System.out.println("Erro ocorrido na classe ListaProcessos: n" + erro);
return null;
} finally{
if(state != null){ //fechar os statments
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list;
}
}
Então... você não precisa usar esse split no seu jsp se vc já possuir os dados em atributos distintos. O ideal é você sempre enviar pro jsp tudo mastigado.Por que disso: o jsp usa da performance da máquina do cliente. Já as suas classes ficam no servidor e usam o processamento dele, que muitas vezes é superior e as vezes só roda aplicações então tem memória pra isso...
Segue a outra classe... Falta o último método que é do seu servlet...
package model; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; public class ListaProcessos { private ConexaoMysql conexaoMysql; public List<Processo> Lista(HttpServletRequest request, String projeto){ conexaoMysql = new ConexaoMysql(); Statement state = null; ResultSet rs = null; List<Processo> list = new ArrayList<Processo>(); Processo processo; try { state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = state.executeQuery("Select * from processos inner join projeto on (processos.FKProjeto = projeto.idProjeto) where projeto.nome = '"+projeto+"'"); while (rs.next()) { // Cria um novo processo a ser incluso na lista processo = new Processo(); processo.setProcesso (rs.getString("processo")); processo.setRc (rs.getString("RC")); processo.setDescricao (rs.getString("descricao")); processo.setOrcado (rs.getString("orcado")); processo.setNecessidade(rs.getString("necessidadeCliente")); processo.setPrevEtapa (rs.getString("prevTermEtapaAtual")); // Inclui o item na lista list.add(processo); } } catch(Exception erro) { System.out.println("Erro ocorrido na classe ListaProcessos: n" + erro); return null; } finally{ if(state != null){ //fechar os statments try { state.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return list; } }
O JSP roda na maquina??? Entao se eu usar uma versao diferente do java pode nao rodar ou ficar lento?
Na minha empresa todas as maquinas tem a versao 4 e estou utilizando a versao mais recente pensando que tudo rodaria no servidor.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String projeto = request.getParameter("projeto");
PrintWriter out = response.getWriter();
out.println("ESSE É O PROJETO QUE EU CLIQUEI: " + projeto);
List<Processo> results = new ArrayList<Processo>();
ListaProcessos Processos = new ListaProcessos();
results = Processos.Lista(request, projeto);// passa o parametro
for (int i=0; i<results.list.size(); i++){
System.out.println("\n\nProcesso: " + list.getProcesso());
System.out.println("\nRC: " + list.getRc());
System.out.println("\nDescricao: " + list.getDescricao());
System.out.println("\nOrçado: " + list.getOrcado());
System.out.println("\nNecessidade " + list.getNecessidade());
}
// Não sei como funciona esse request, mas acho que retorna certinho mesmo
request.setAttribute("processosEncontrados", results);
request.getRequestDispatcher("abas.jsp").forward(request, response);
}
Testa e depois diz se funcionou.
Abs.
Então… Eu não sei o que exatamente você está usando de jsp ou se está usando jsf pra suas páginas.
Acredito que tenha algum problema com versão sim, mas não vou saber te dizer quais…
Acho que se o que você for fazer não for nada complexo, as vezes ele roda em qualquer versão.
Mas que o jsp roda na máquina é fato, roda na página da máquina (java server pages).
Um teste que você pode fazer é acessar a sua aplicação de uma máquina na rede com ela rodando no servidor. Exemplo, starta ela, deixa ela rodando na sua máquina. O mesmo endereço vc coloca no browser de outra máquina, só que em vez de localhost, vc coloca seu ip. E daí ve como ela está rodando!

Então… Eu não sei o que exatamente você está usando de jsp ou se está usando jsf pra suas páginas.
Acredito que tenha algum problema com versão sim, mas não vou saber te dizer quais…
Acho que se o que você for fazer não for nada complexo, as vezes ele roda em qualquer versão.
Mas que o jsp roda na máquina é fato, roda na página da máquina (java server pages).Um teste que você pode fazer é acessar a sua aplicação de uma máquina na rede com ela rodando no servidor. Exemplo, starta ela, deixa ela rodando na sua máquina. O mesmo endereço vc coloca no browser de outra máquina, só que em vez de localhost, vc coloca seu ip. E daí ve como ela está rodando!
:)
Mas o jsp vira um servlet e servlets rodam no servidor
Como faço para imprimir o valor do list?
Tentei imprimir assim System.out.println("Eu sou o list infernal: " + list);
Eu sou o list infernal: [model.Processo@186dda3, model.Processo@1412e75, model.Processo@510e39, model.Processo@17cf6b6, model.Processo@1295fe8, model.Processo@157b46f, model.Processo@1071c84, model.Processo@1e152f4, model.Processo@d1329, model.Processo@650892, model.Processo@115d06c, model.Processo@126a29c, model.Processo@17dc1cb, model.Processo@13e15f7]
Para que isso funcione, a classe Processo tem que ter o método toString implementado. Ou então, você percorre a lista e faz um system.out mais específico.
Poderia me dar um exemplo por favor?
Classe Processo:
package model;
public class Processo {
private String rc;
private String descricao;
private String orcado;
private String necessidade;
private String etapa;
private String etapaAux;
private String prevEtapa;
private String processo;
public void setRc(String rc){
this.rc = rc;
}
public String getRc(){
return this.rc;
}
public void setDescricao(String descricao){
this.descricao = descricao;
}
public String getDescricao(){
return this.descricao;
}
public void setOrcado(String orcado){
this.orcado = orcado;
}
public String getOrcado(){
return this.orcado;
}
public void setNecessidade(String necessidade){
this.necessidade = necessidade;
}
public String getNecessidade(){
return this.necessidade;
}
public void setEtapa(String etapa){
this.etapa = etapa;
}
public String getEtapa(){
return this.etapa;
}
public void setEtapaAux(String etapaAux){
this.etapaAux = etapaAux;
}
public String getEtapaAux(){
return this.etapaAux;
}
public void setPrevEtapa(String prevEtapa){
this.prevEtapa = prevEtapa;
}
public String getPrevEtapa(){
return this.prevEtapa;
}
public void setProcesso(String processo){
this.processo = processo;
}
public String getProcesso(){
return this.processo;
}
}
Classe ListaProcessos
package model;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
public class ListaProcessos {
private ConexaoMysql conexaoMysql;
public List<Processo> Lista(HttpServletRequest request, String projeto){
conexaoMysql = new ConexaoMysql();
Statement state = null;
ResultSet rs = null;
List<Processo> list = new ArrayList<Processo>();
Processo processo;
try {
state = conexaoMysql.getConnection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = state.executeQuery("Select * from processos inner join projeto on (processos.FKProjeto = projeto.idProjeto) where projeto.nome = '"+projeto+"'");
while (rs.next()) {
// Cria um novo processo a ser incluso na lista
processo = new Processo();
processo.setProcesso (rs.getString("processo"));
processo.setRc (rs.getString("RC"));
processo.setDescricao (rs.getString("descricao"));
processo.setOrcado (rs.getString("orcado"));
processo.setNecessidade(rs.getString("necessidadeCliente"));
processo.setPrevEtapa (rs.getString("prevTermEtapaAtual"));
// Inclui o item na lista
list.add(processo);
}
} catch(Exception erro) {
System.out.println("Erro ocorrido na classe ListaProcessos: n" + erro);
return null;
} finally{
if(state != null){ //fechar os statments
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println("Eu sou o list infernal: " + list.get(1));
return list;
}
}
Servlet Processos
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String projeto = request.getParameter("projeto");
PrintWriter out = response.getWriter();
out.println("ESSE É O PROJETO QUE EU CLIQUEI: " + projeto);
List<Processo> results;
ListaProcessos Processos = new ListaProcessos();
results = Processos.Lista(request, projeto);// passa o parametro
request.setAttribute("processosEncontrados", results);
request.getRequestDispatcher("abas.jsp").forward(request, response);
}
Quando eu faço isso:
System.out.println("Eu sou o list infernal: " + list.get(1).getEtapa());
Imprime Eu sou o list infernal: null. PQ?
Porque a sua lista não carregou nenhum valor.
A select não está retornando nada.
Teste sua select direatemente no banco ou execute a rotina pelo debug e veja se ele entra no while e quantas vezes.
Porque a sua lista não carregou nenhum valor.
A select não está retornando nada.
Teste sua select direatemente no banco ou execute a rotina pelo debug e veja se ele entra no while e quantas vezes.
Realmente… eu nao tinha populado a a variavel etapa.
System.out.println(processo);
Quem responde essa pergunta ao Java é o método toString().
Na sua classe Processo crie um método assim:
public String toString() {
}
Dentro dele, você deve retornar uma String contendo o texto que será retornado. Por exemplo, para uma saída como:
Processo: XYZ Etapa: ABC
public String toString() {
return "Processo: " + processo + " Etapa: " + etapa;
}
Para imprimir os valores faça dessa maneira.
Processo processo;
for (int i = 0; i < list.size(); i++) {
processo = list.get(i);
// imprima cada tipo de dado da class
// mas o bom seria você criar, na sua classe Processo,
// um método toString, que somente lançando o objeto
// já exibiria todos os dados
// ex: System.out.println(processo)
System.out.println(processo.getAlgumDado());
System.out.println(processo.getOutroDato());
// e assim por diante
}
É isso!