Listas

7 respostas
simberg

Como faço para uma lista pegar informações de outra lista?

Por exemplo: lista1 - de vendedores.

lista2 - os clientes desse vendedor (no máximo 4 por vendedor)

fazer uma tabela em jsp com essas duas listas, com vendedores e seus devidos clientes.

Alguém pode me ajudar? please?

Tava usando ArrayList, consigo as duas listas, mas não fazer elas juntas.

7 Respostas

von.juliano
Sua classe vendedor tem um ArrayList de clientes:
class Vendedor() {
	ArrayList<Cliente> clientes;
	...
}
Então na servlet você coloca a lista de vendedores no request:
ArrayList<Vendedor> vendedores = createList();
request.setAttribute("vendedores", vendedores);
Aí é só iterar uma lista dentro da outra:
<table>
	<c:forEach var="vendedor" items="${vendedores}">
		<tr>
			<td><c:out value="${vendedor.nome}" /></td>
			<c:forEach var="cliente" items="${vendedor.clientes}">
				<td><c:out value="${cliente.nome}" /></td>
			</c:forEach>
		</tr>
	</c:forEach>
</table>
Blz? Flw! :thumbup:
simberg

Eu estou tentando, mas como ficaria para acesso a tabelas em um banco de dados?

Usando SQL. Daria para dar um where?

É isso q não estou conseguindo.

Obrigado.

von.juliano

Sim, imagino que você tenha uma classe de acesso ao banco, então é só pegar do request o parâmetro que você vai utilizar como filtro e passar para o método que busca os dados no banco, aí é só criar as listas e fazer como está no post anterior.

Blz Flw! :thumbup:

simberg

Obrigado von.juliano,

Tentei adaptar suas idéias ao meu trabalho.

O exemplo que dei foi para facilitar o entendimento. Apesar do sistema estar ficando interessante, ainda estou engatinhando no Java, mas estou fazendo tudo em MVC e procurando seguir os patterns.

Na verdade não são clientes e vendedores e sim, Banca, candidatos, subbanca (onde aparecem os professores que estão na banca). Mas a idéia é a mesma.

Se o candidato vai defender mestrado, são 3 professores na banca, um o orientador e mais dois professores, se for doutorado, além do orientador, mais 4 professores.

Fiz o jsp com jstl, fiz as servlets e o DAO.

No DAO fiz as listas.


public ListgetLista_cc() throws SQLException{

PreparedStatement stmt= this.connection.prepareStatement(“SELECT …”);

ResultSet rs=stmt.executeQuery();

ArrayListlist_cc = new ArrayList();

ContatoDAO dao;

while(rs.next()){
Contato c1=new Contato();
			
			c1.setNumero(rs.getInt("numero"));	
			c1.setData(rs.getDate("data"));
			c1.setHorario(rs.getTime("horario"));
			c1.setNome_aluno(rs.getString("nome_aluno"));
			c1.setTitulo(rs.getString("titulo"));
			c1.setTipo(rs.getBoolean("tipo"));
			c1.setNome_professor(rs.getString("nome_professor"));  // esse é o Orientador.
			c1.setDescricao(rs.getString("descricao"));

// aqui abaixo estou pegando o número da banca e jogando mais abaixo

try{
				dao=new ContatoDAO();
				ContatoDAO.setnumero(rs.getInt("numero"));
				}catch(SQLException e){
					e.printStackTrace();
				}	
			
			list_cc.add(c1);
	}
	rs.close();
	stmt.close();
	return list_cc;
}

// aqui recebe o número da banca.

public static void setnumero(Integer numero)throws SQLException{

numerox=numero;

System.out.println(numerox);

}

// aqui abaixo fiz a lista dos orientadores das bancas, pegando na cláusula where o “numerox” número da banca, para associar a tabela subbanca que tem os orientadores.

public List<Contato>getLista_ccp() throws SQLException{
	PreparedStatement stmt= this.connection.prepareStatement("SELECT .......   where subbanca.defesa="+numerox);
	ResultSet rs=stmt.executeQuery();
	
	ArrayList<Contato>list_ccp = new ArrayList<Contato>();
	
	while(rs.next()){
		Contato c1=new Contato();
		c1.setNome_professor(rs.getString("nome_professor"));
		c1.setInstituicao(rs.getInt("instituicao"));
		c1.setIdp(rs.getInt("idp"));
		list_ccp.add(c1);
	}
	
	rs.close();
	stmt.close();
	return list_ccp;
}

No jsp:

O nome dos orientadores se repetem de forma igual, não dando distinção para a banca certa, ou seja todos os orientadores aparecem iguais para todas as bancas.

Não aparece assim: banca1 - orientadores da banca1
banca2 -orientadores da banca2

aparece:
banca 1 -todos os orientadores de todas as bancas
banca2 - todos os orientadores de todas as bancas

Será que há alguma forma de arrumar isso, ou terei que refazer todo o procedimento?


<jsp:useBean id=“dao” class=“br.direito.defesas.dao.ContatoDAO” />

<c:forEach var="contato" items="${dao.lista_cc}">
<td>
	<font size="2" color="#FFFFFF"><fmt:formatDate value="${contato.horario}" pattern="HH:mm" /></font>
</td>
<td>
	<font size="2" color="#FFFFFF">${contato.descricao}</font>
</td>

<td>
	<script language="JavaScript">
		if(${contato.tipo}==true){
		    document.write("<font size='2' color='#FFFFFF'>Doutorado</font>");
		}
		else{
			document.write("<font size='2'  color='#FFFFFF'>Mestrado</font>");
		} 
	</script>
</td>
Nome do Aluno
<td>
	<font size='2'>Orientador</font>
</td>
<td>
	<font size='2'>Título</font>
</td>
<TD colspan="2">	
   	<font size="2">${contato.nome_aluno}</font>
</td>

<td>
	<font size="2">${contato.nome_professor}</font>
</td>   	
<td>
	<font size="2">${contato.titulo}</font>
</td>
<td>
	
</td>
Bancax [color=red] ${contato.nome_professor} [/color]

Obrigado, desculpa a linguiça.

von.juliano

Oi simberg
Cara, primeiro de tudo, dá uma formatada no seu post com as tags code, que assim num dá pra entender nada.

Com jstl você está iterando apenas uma lista, é assim que deve ser mesmo? Não entendi direito seu código, acerte ele aew que eu olho melhor.

Flw! :thumbup:

simberg

Vou melhorar e coloco novamente.

simberg

Finalmente:
Na verdade não são clientes e vendedores e sim, Banca, candidatos, subbanca (onde aparecem os professores que estão na banca). Mas a idéia é a mesma.

Se o candidato vai defender mestrado, são 3 professores na banca, um o orientador e mais dois professores, se for doutorado, além do orientador, mais 4 professores.

Fiz o jsp com jstl, fiz as servlets e o DAO.

No DAO fiz as listas.

public List<Contato>getLista_cc() throws SQLException{
PreparedStatement stmt= this.connection.prepareStatement("SELECT .......");
ResultSet rs=stmt.executeQuery();
ArrayList<Contato>list_cc = new ArrayList<Contato>();
       ContatoDAO dao;
       while(rs.next()){

              Contato c1=new Contato();

              c1.setNumero(rs.getInt("numero"));
              c1.setData(rs.getDate("data"));
              c1.setHorario(rs.getTime("horario"));
              c1.setNome_aluno(rs.getString("nome_aluno"));
              c1.setTitulo(rs.getString("titulo"));
              c1.setTipo(rs.getBoolean("tipo"));
              c1.setNome_professor(rs.getString("nome_professor")); // esse é o Orientador.
              c1.setDescricao(rs.getString("descricao"));

aqui abaixo estou pegando o número da banca e jogando mais abaixo

try{
        dao=new ContatoDAO();
        ContatoDAO.setnumero(rs.getInt("numero"));
}catch(SQLException e){
        e.printStackTrace();
}

list_cc.add(c1);
}
rs.close();
stmt.close();
return list_cc;
}

aqui recebe o número da banca.

public static void setnumero(Integer numero)throws SQLException{
       numerox=numero;
       
}

aqui abaixo fiz a lista dos orientadores das bancas, pegando na cláusula where o “numerox” número da banca, para associar a tabela subbanca que tem os orientadores.

public List<Contato>getLista_ccp() throws SQLException{
     PreparedStatement stmt= this.connection.prepareStatement("SELECT ....... where subbanca.defesa="+numerox);
     ResultSet rs=stmt.executeQuery();

     ArrayList<Contato>list_ccp = new ArrayList<Contato>();

     while(rs.next()){
           Contato c1=new Contato();
           c1.setNome_professor(rs.getString("nome_professor"));
           c1.setInstituicao(rs.getInt("instituicao"));
           c1.setIdp(rs.getInt("idp"));
           list_ccp.add(c1);
     }

rs.close();
stmt.close();
return list_ccp;
}

No jsp:

O nome dos orientadores se repetem de forma igual, não dando distinção para a banca certa, ou seja todos os orientadores aparecem iguais para todas as bancas.

Não aparece assim: banca1 - orientadores da banca1
banca2 -orientadores da banca2

aparece:
banca 1 -todos os orientadores de todas as bancas
banca2 - todos os orientadores de todas as bancas

Será que há alguma forma de arrumar isso, ou terei que refazer todo o procedimento?

<jsp:useBean id="dao" class="br.direito.defesas.dao.ContatoDAO" />

<c:forEach var="contato" items="${dao.lista_cc}">
<tr bgcolor="#990000">
<TD>
<font size="2" color="#FFFFFF"><fmt:formatDate value="${contato.data}" pattern="dd-MM-yyyy" /> </font>
</TD>

<td>
<font size="2" color="#FFFFFF"><fmt:formatDate value="${contato.horario}" pattern="HH:mm" /></font>
</td>
<td>
<font size="2" color="#FFFFFF">${contato.descricao}</font>
</td>

<td>
<script language="JavaScript">
if(${contato.tipo}==true){
document.write("<font size='2' color='#FFFFFF'>Doutorado</font>");
}
else{
document.write("<font size='2' color='#FFFFFF'>Mestrado</font>");
}
</script>
</td>
</tr>
<tr>
<td colspan="2">
<font size='2'>Nome do Aluno</font>
</td>

<td>
<font size='2'>Orientador</font>
</td>
<td>
<font size='2'>Título</font>
</td>

</tr>
<tr>

<TD colspan="2">
<font size="2">${contato.nome_aluno}</font>
</td>

<td>
<font size="2">${contato.nome_professor}</font>
</td>
<td>
<font size="2">${contato.titulo}</font>
</td>
<td>

</td>

</tr>
<tr>
<td colspan="4">
Bancax
</td>
<td>
<c:forEach var="contato" items="${dao.lista_ccp}">
${contato.nome_professor}
</c:forEach>
</td>
</tr>
</c:forEach>

Agora acho q melhorou um pouco.

Criado 19 de agosto de 2008
Ultima resposta 22 de ago. de 2008
Respostas 7
Participantes 2