forEach com select + Vector não funciona

8 respostas
A

Olá,

Pessoal tenho uma classe chamada Proposta.java que lista o campo da minha tabela (MYSQL) chamada Nome que tem o método getListar1 que joga os dados da coluna do meu BD.

[/code]
public Vector getListar1(){

Vector x = new Vector();
try {
// Joga dados no vetor
PreparedStatement sql = conn.prepareStatement("select nome from clientes ");
ResultSet rs = sql.executeQuery();
while (rs.next()) {
x.addElement(new Proposta(rs.getString("nome")));

}
rs.close();
}
catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return x;
}

}[code]

Na minha jsp está assim para listar estes nomes dentro de um Combobox usei o jstl para fazer isso. Acima da página já adicionei o jstl/fmt e o jstl/core e tbm os devidos jars.

<hr>
<jsp:useBean id="proposta" scope="page" class="cadastro.Proposta"/>

<select name="proposta">
<c:forEach var="z" items="${proposta.listar1}">
<option> ${z} </option> // aqui não pega a coluna nome!!
</c:forEach>
</select>

<hr>

Só que quando visualizo a página no Combobox aparece isso:

<option> cadastro.Proposta@1b2d7df </option>

<option> cadastro.Proposta@7a9224 </option>

<option> cadastro.Proposta@110b640 </option>

A var ${z} não está pegando o valor . O que pode ser este erro sabe porque eu testei usando uma tabela com o mesmo projeto e funcionou direitinho ,será que o select no caso do Combobox não busca muitos valores, precisa colocar mais alguma linha de comando dentro desse
select ?
Um grande abraço, espero ajuda mas tenho certeza que conseguirei a turma do GUJ sempre foi muito prestativa comigo... :lol:

8 Respostas

fcoury

Você está usando o objeto, e não um atributo dele... :)

Troque:

<option> ${z} </option> // aqui não pega a coluna nome!!

Por:

<option> ${z.getNome()} </option> // aqui não pega a coluna nome!!

E veja se funciona...

A

Oi Felipe,

Fiz desse jeito que vc falou troquei por ${z.getNome()}  mas agora  o seguinte erro :

org.apache.jasper.JasperException: /proposta.jsp(28,17) The function getNome must be used with a prefix when a default namespace is not specified.
A

Olá por fvr alguem tem um exemplo ou um pequeno projeto que usa o jstl com select para enviar por email …para mim assim tento fazer aqui …

David

Adriana Cardoso:
Fiz desse jeito que vc falou troquei por ${z.getNome()} mas agora dá o seguinte erro :
O certo seria ${ z.nome }.

A

Oi David,

Teste desse jeito e continua aparecendo :

 &lt;option&gt; cadastro.Proposta@13d9460 &lt;/option&gt;

Insisto alguem tem por fvr um peqeno projeto usando select , nao é falta de procura estou ha bastante tempo garimpando na net mas nao achei nada para solucionar o caso.

Pedrosa

Vc precisa criar o ben e popular onde vc faz o while na sua classe

//NomeVO

public class NomeVO {

	private String nome;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
}
public List getNome() throws SQLException {
		strSQL = "select * from tabela";
               PreparedStatement stmt = this.connection.prepareStatement(strSQL);
		ResultSet rs = stmt.executeQuery();
		List list = new ArrayList();
		while (rs.next()) {
			NomeVO dados = new NomeVO();
			dados.setNome(rs.getString("coluna"));
			list.add(dados);
		}
		rs.close();
		stmt.close();
		return list;
	}

Agora no seu jsp vc recebe o nome da lista via request e itera:

<c:forEach var="nomeLista" items="${nomeLista}">
    <option value="${nomeLista.nome}">${nomeLista.nome}</option>
</c:forEach>

A sua camada view não precisa saber de que classe vem, apenas recebe uma lista, ou seja nem precisa dessa linha:

<jsp:useBean id="proposta" scope="page" class="cadastro.Proposta"/>

passe a lista no controller

request.setAtributte("nomeLista", new Proposta().getNomes());

Note que esse nome é a variavel que foi criada no bean, assim deve funcionar agora!

A
oi Pedrosa,

Entao eu havia criado sim a classe Bean entao ai eu fiz dessa forma acrescentei o comando que vc passou : Esta classe herda da Conexao com o BD

[list]public class Proposta extends Conexao{

private String nome;
     

public Proposta() {
	      conecta();
}


// ====== gets e sets===========

public String getNome() {
	return this.nome;
}


public void setNome(String nome) {
	this.nome = nome;
}

// Chama lista do bd para o ComboBox

public List getListar() throws SQLException {
 		String strSQL = "select * from clientes";
        PreparedStatement stmt = this.conn.prepareStatement(strSQL);
 		ResultSet rs = stmt.executeQuery();
 		List list = (List) new ArrayList();
 			while (rs.next()) {
 			Proposta dados = new Proposta();
 			dados.setNome(rs.getString("nome"));
 			list.add(dados);
 		}
 		rs.close();
 		stmt.close();
 		return list;
 	}

}[/list]

Depois na jsp:

<jsp:useBean id=“proposta” scope=“request” class=“cadastro.Proposta”/>

<select  name=“proposta”>

<c:forEach var=“listar” items="${listar}">

<option value="${listar.nome}">${listar.nome}</option>

</c:forEach>

</select>

A minha duvida é sobre esta instância do Bean como vc pode ver acima nesse caso fiz aqui direto na jsp e não na Controller.

Sobre o que vc falou request.setAtributte(“nomeLista”, new Proposta().getNomes());onde eu adiciono esta linha na propria classe Proposta ?
A

Olá amigos,

Então agradeço a ajuda de vcs , e encontrei a solução é o seguinte acabei fazendo a minha lista usando Vector mesmo como havia feito de principio.
Mas na instrução do select esqueci de colocar order by nome assim ele seleciona o item desejado da tabela Clientes - no caso Nomes.
Outra coisa no select na jsp usei da seguinte forma , instanciei o Bean na propria jsp acho mais fácil do que na Controller.

&lt;jsp:useBean id="proposta" scope="page" class="cadastro.Proposta"/&gt; &lt;select name="proposta"&gt; &lt;c:forEach var="listar1" items="${proposta.listar1}"&gt; &lt;option&gt; ${listar1.nome} &lt;/option&gt; &lt;/c:forEach&gt; &lt;/select&gt;

Mas agradeço a todos até mais......
Criado 20 de outubro de 2006
Ultima resposta 25 de out. de 2006
Respostas 8
Participantes 4