Hola!
gracias otra vez. Bien...
¿Tiene algo que ver que este probando el ejemplo sobre Mozilla Firefox instalado en Ubuntu? O que la bd sea Firebird?
Otra opción es adecuar este código a Ajax, es el MVC del que había comentado al inicio:
JSP:
Código PHP:
<%--
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="Operaciones.*,Controlador.*,beans.*,java.util.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Combos dependientes con bd</title>
<script type="text/javascript">
function control()
{
document.forms[0].action='Controlador?operacion=depende';
document.forms[0].submit();
}
</script>
</head>
<body>
<h1>PruebaCombos</h1>
<form name="formCombos" method="POST" action="javascript">
<table>
<tr>
<td>
Nombre de pais
</td>
<td>
<select name="Id_Pais" onchange="control()">
<%
Operaciones op=new Operaciones();
ArrayList<Pais> p=op.getPaises();
for(int i=0;i<p.size();i++)
{
%>
<option value="<%=p.get(i).getCod_Pais()%>"><%=p.get(i).getNom_Pais()%></option>
<%
}
%>
</select>
</td>
<td>
<select name="Id_Departamento" onchange="control2()">
<%
ArrayList<Departamento> dp=op.getDptos(request.getParameter("Id_Pais"));
for(int j=0;j<dp.size();j++)
{
%>
<option value="<%=dp.get(j).getCod_Departamento()%>"><%=dp.get(j).getNom_departamento()%></option>
<%
}
%>
</select>
</td>
</tr>
<tr>
<td>
<input type="button" name="Buscar" value="Buscar" id="Buscar" onclick="control()"/>
</td>
</tr>
</table>
</form>
</body>
</html>
El controlador(Servlet):
Código PHP:
//Combo dependiente para sacar los departamentos
public class Controlador extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
System.out.println(true);
String op = request.getParameter("operacion");
System.out.println(op);
ServletContext ctx = this.getServletContext();
System.out.println(ctx);
Operaciones data = new Operaciones();
RequestDispatcher rd;
RequestDispatcher rd2;
System.out.println(request.getLocale());
if(op.equals("depende"))
{
String cod_pais= request.getParameter("Cod_Pais");
request.setAttribute("Departamento",data.getDptos(cod_pais));
rd=request.getRequestDispatcher("/PruebaCombos.jsp");
rd.forward(request, response);
}
}
//Metodos del Servlet
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}
Y la clase Operaciones.java
Código PHP:
//Devolver lista de paises
public ArrayList<Pais> getPaises()
{
ArrayList<Pais> p=new ArrayList<Pais>();
try{
Connection cn=this.getConection();
String query="Select * from Pais";
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery(query);
while(rs.next())
{
Pais pa=new Pais();
pa.setCod_Pais(rs.getInt("Id_Pais"));
pa.setNom_Pais(rs.getString("Nom_Pais"));
p.add(pa);
}
}catch(SQLException e){
e.printStackTrace();
}
return p;
}
//Devolver lista de departamentos de acuerdo al pais al que corresponde.
public ArrayList<Departamento> getDptos(String cod_pais)
{
ArrayList<Departamento> dep=new ArrayList<Departamento>();
try
{
Connection cn=this.getConection();
String query="Select * from Departamento where Id_Pais='"+cod_pais+"'";
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery(query);
while(rs.next())
{
Departamento d=new Departamento();
d.setCod_Departamento(rs.getInt("Id_Departamento"));
d.setNom_departamento(rs.getString("Nom_Departamento"));
d.setCod_Pais(rs.getInt("Id_Pais"));
dep.add(d);
}
}catch(SQLException e){
e.printStackTrace();
}
return dep;
}
Esa es la unica otra opción que se me ocurre de verdad aprecio mucho su ayuda