Olah amigos do GUJ.
A minha duvida parece a principio muito simples.
Eis aqui uma explicacao da mesma.
Tenho uma jsp capaz de obter dados atraves de um Vector ( dados referente a paises ) para um elemento select.
Seria a ideia de no select ter os dados referente a cada pais.(Brasil, Paraguai, etc…)
Bem, a logica seria q, quando o usuario selecionasse um país (por exemplo Brasil) retornassem estados referentes a este país (por exemplo Sao Paulo, Parana…etc).
O q me intriga eh q a jsp q uso obtem os dados referentes ao País… (ateh ai tudo bem)atraves de um bean de uma classe q criei (Nacionalidade.java). Porem quando uso o id referente ao País selecionado para setar um metodo em minha proprica classe (Nacionalidade.jsp), ele nao retorna os dados…(retorna null). O intrigante tambem q se eu usar uma outra class tipo (Nacionalidade2.java) e utiliza-la a mesma como um bean ela consegue setar o id do país…e conseguentemente retornar os estados relacionados…
Irei inserir o codigo das minha implementacoes para se possivel , alguem possa me ajudar.
Agradeço desde jah pela atencao de todos. (Gostaria d dize q uso as plataformas Tomcat4, jdk1.3, e o DB access)
Obs 1: Este codigo retorna null na <option> em vez dos Estados
< – codigo da index.jsp -->
<html>
<head>
<title>:: INDEX ::</title>
<script language=“JavaScript”>
<!–
function setarNacionalidade() {
var ID_Nac = document.frmCadastro.Nacionalidade.value;
document.location = “<a href="http://localhost:8080/RH/jsp/index.jsp?Nacionalidade=">http://localhost:8080/RH/jsp/index.jsp?Nacionalidade=</a>”+ ID_Nac;
}
//–>
</script>
</head>
<body>
<jsp:useBean id=“oNac” scope=“page” class=“rh.sistema.db.Nacionalidade”/>
<jsp:useBean id=“oNac2” scope=“page” class=“rh.sistema.db.Nacionalidade2”/>
<%@ page import=“java.util.Vector”%>
<%
// obtem o value do elemento <selece name=“Nacionalidade”> executada em cada refresh
String valueIDNac = request.getParameter(“Nacionalidade”);
%>
<%
Vector vNac = new Vector();
vNac = oNac.getIDNac_Pais();
int size = vNac.size();
int divize = size / 2;
String[] ID_Nacionalidade = new String[divize];
String Pais[] = new String[divize];
%>
<form name=“frmCadastro”>
<select name=“Nacionalidade” onchange=“setarNacionalidade()”>
<%if( valueIDNac == null ) {%>
<option value=“none”>Escolha um Pais</option>
<%
for(int i = 0; i < size; i++) {
ID_Nacionalidade[0] = (String)vNac.get(i);
i++;
Pais[0] = (String)vNac.get(i);
%>
<option value="<%= ID_Nacionalidade[0]%>"><%= Pais[0]%></option>
<%
}
%>
<%} else if( valueIDNac.equals(“1”) ) {
oNac.setIDNac(valueIDNac); // aqui retorna null em vez do Estado
%>
<option value="<%=valueIDNac%>"><%=oNac.getPais()%></option>
<%
%>
<%} else if( valueIDNac.equals(“2”) ) {
oNac.setIDNac(valueIDNac); // aqui retorna null em vez do Estado
%>
<option value="<%=valueIDNac%>"><%=oNac.getPais()%></option>
<%
}
%>
</select>
</form>
</body>
</html>
< – codigo da Nacionalidade.java -->
package rh.sistema.db;
import java.sql.*;
import java.util.Vector;
public class Nacionalidade extends DB_Conexao {
private Connection con;
Vector vreturn;
int ID_Nacionalidade = 0;
String Pais = null;
public Nacionalidade() {
con = super.abrirConexao();
}
//// Vector retornado representando o ID_Nacionalidade e Pais //////
public Vector getIDNac_Pais() {
vreturn = new Vector();
try {
vreturn = this.findNacionalidade();
}
catch(Exception e) {
System.out.println("Erro d vector -"+ e);
}
return vreturn;
}
///// Vector retornando o ID_Nacionalidade e Pais /////
public Vector findNacionalidade() throws Exception {
ResultSet rs = null;
Statement stmt = con.createStatement();
rs = stmt.executeQuery("select ID_Nacionalidade,Pais from Nacionalidade");
Vector v = new Vector();
while(rs.next()) {
v.addElement(rs.getString("ID_Nacionalidade"));
v.addElement(rs.getString("Pais"));
}
rs.close();
stmt.close();
con.close();
super.fecharConexao();
return v;
}
//// seta a variavel ID_Nacionalidade /////
public void setIDNac(String newVal) {
ID_Nacionalidade = Integer.parseInt(newVal);
if(ID_Nacionalidade == 1 || ID_Nacionalidade == 2) {
try {
this.setIDNacionalidade();
}
catch(Exception e) {
System.out.println("Erro - "+ e);
}
}
}
//// retorna o Pais /////
public String getPais() {
return Pais;
}
//// retorna o Pais conforme o valor passado por ID_Nacionalidade /////
public void setIDNacionalidade() throws Exception {
ResultSet rs = null;
PreparedStatement pstmt = con.prepareStatement("select Pais from Nacionalidade where "+
"ID_Nacionalidade = ?");
pstmt.setInt(1,ID_Nacionalidade);
rs = pstmt.executeQuery();
if(rs.next()) {
Pais = rs.getString("Pais");
}
rs.close();
pstmt.close();
super.fecharConexao();
}
//////// main //////////////
static void main(String args[]) {
Nacionalidade oNac = new Nacionalidade();
/*try {
Vector v = new Vector();
v = oNac.getIDNac_Pais();
System.out.println(v.get(1));
int size = v.size();
int divide = size / 2;
String[] ID_Nacionalidade = new String[divide];
String[] Pais = new String[divide];
for(int i=0; i<size; i++) {
ID_Nacionalidade[0] = (String) v.get(i);
i++;
Pais[0] = (String) v.get(i);
System.out.println(ID_Nacionalidade[0]);
System.out.println(Pais[0]);
}
}
catch(Exception e) {
System.err.println("Erro com vector - "+ e);
}*/
oNac.setIDNac("1");
String pais = oNac.getPais();
System.out.println(pais);
}
}
Obs 2: Este codigo retorna os Estados com sucesso
na jsp (index.jsp) eu alterei apenas os trechos para:
<jsp:useBean id=“oNac2” scope=“page” class=“rh.sistema.db.Nacionalidade2”/>
<%} else if( valueIDNac.equals(“1”) ) {
oNac2.setIDNac(valueIDNac);
%>
<option value="<%=valueIDNac%>"><%=oNac2.getPais()%></option>
<%
%>
<%} else if( valueIDNac.equals(“2”) ) {
oNac2.setIDNac(valueIDNac);
%>
<option value="<%=valueIDNac%>"><%=oNac2.getPais()%></option>
<%
}
%>
e utilizei outra classe (Nacionalidade2.java)
package rh.sistema.db;
import java.sql.*;
import java.util.Vector;
public class Nacionalidade2 extends DB_Conexao {
private Connection con;
int ID_Nacionalidade = 0;
String Pais = null;
public Nacionalidade2() {
con = super.abrirConexao();
}
//// seta a variavel ID_Nacionalidade /////
public void setIDNac(String newVal) {
ID_Nacionalidade = Integer.parseInt(newVal);
if(ID_Nacionalidade == 1 || ID_Nacionalidade == 2) {
try {
this.setIDNacionalidade();
}
catch(Exception e) {
System.out.println("Erro - "+ e);
}
}
}
//// retorna o Pais /////
public String getPais() {
return Pais;
}
//// retorna o Pais conforme o valor passado por ID_Nacionalidade /////
public void setIDNacionalidade() throws Exception {
ResultSet rs = null;
PreparedStatement pstmt = con.prepareStatement("select Pais from Nacionalidade where "+
"ID_Nacionalidade = ?");
pstmt.setInt(1,ID_Nacionalidade);
rs = pstmt.executeQuery();
if(rs.next()) {
Pais = rs.getString("Pais");
}
rs.close();
pstmt.close();
super.fecharConexao();
}
//////// main //////////////
static void main(String args[]) {
Nacionalidade oNac = new Nacionalidade();
oNac.setIDNac("2");
String pais = oNac.getPais();
System.out.println(pais);
}
}