Bien la cosa es que estoy practicando como trabajo Ajax-js-servlet y envio GET y POST o incluso JSON funciona bien el problema esta en cuando quiero enviar un formulario como FormData y es que no soy capaz de coger los parámetros con el servlet.
Este es el js: Lineas clave 67-74
Código Javascript:
Ver original
window.addEventListener("load",cargarSelect); var xhl; function cargarSelect(){ //creamos el objeto XMLHttpRequest xhl= new XMLHttpRequest(); var formu=document.createElement("form"); formu.method="POST"; formu.name="formu"; formu.id="formu"; formu.enctype="multipart/form-data"; document.body.appendChild(formu); //pedimos el select de las comunidades peticionComunidades(); } function peticionComunidades(){ //añadimos el listener para gestionar los cambios en el objeto xhl.addEventListener("readystatechange",procesarDatosComunidades); //cargamos el fichero en este caso un servlet xhl.open("GET","comunidadesServlet",true); //El metodo GET manda en el enlace los datos pero en este caso no necesitamos enviar nada solo recoger xhl.send(null); } function procesarDatosComunidades(evento){ var event=evento || window.event; //comprobamos que el estado de la descarga ajax ha terminado if(event.target.readyState ==4 ){ //creamos el select var select=document.createElement("select"); //le damos un id para luego poder acceder a ello select.id="comunidad"; //le añadimos los eventos al select select.addEventListener("change",peticionProvincias); //guardamos los resultado en una variable var doc=xhl.responseXML; //Al ser XML nos devolvera una serie de objetos envueltos en tagsy podemos acceder a ellos var idComunidades=doc.getElementsByTagName("identificador"); var nomComunidades=doc.getElementsByTagName("nombre"); //recorremos los resultados y los vamos añadiendo al select for(var i=0; i<idComunidades.length;i++){ var nodo=document.createElement("option"); nodo.value=idComunidades.item(i).firstChild.nodeValue; nodo.innerHTML=nomComunidades.item(i).firstChild.nodeValue; select.appendChild(nodo); } //añadimos al body el select document.getElementById("formu").appendChild(select); //removemos elevento para usar el objeto mas adelante xhl.removeEventListener("readystatechange",procesarDatosComunidades); } } function peticionProvincias(){ //deshabilitmos el select durante la creacion del select de provincias //document.getElementById("comunidad").disabled =true; //añadimos el listener para gestionar los cambios en el objeto xhl.addEventListener("readystatechange",procesarDatosProvincias); //recogemos el valor de la comunidad var comunidad=document.getElementById("comunidad").value; //cargamos el fichero en este caso un servlet var datos =new FormData(document.getElementById("formu")); xhl.open("POST","provinciasServletForm",true); //añadimos una cabecera y un envio de parametros xhl.setRequestHeader('Content-Type', "multipart/form-data"); xhl.send(datos); } function procesarDatosProvincias(evento){ var event=evento || window.event; //comprobamos que el estado de la descarga ajax ha terminado if(event.target.readyState ==4 && evento.target.status == 200 ){ //si existe el nodo del select primero lo borramos if(!document.getElementById("provincias")){ //creamos el select y le damos un id por un futuro uso var select=document.createElement("select"); select.id="provincias"; //guardamos los resultado en una variable var doc=xhl.responseXML; //Al ser XML nos devolvera una serie de objetos envueltos en tagsy podemos acceder a ellos var idComunidades=doc.getElementsByTagName("identificador"); var nomComunidades=doc.getElementsByTagName("nombre"); //recorremos los resultados y los vamos añadiendo al select for(var i=0; i<idComunidades.length;i++){ var nodo=document.createElement("option"); nodo.value=idComunidades.item(i).firstChild.nodeValue; nodo.innerHTML=nomComunidades.item(i).firstChild.nodeValue; select.appendChild(nodo); } //añadimos al body el select document.getElementById("formu").appendChild(select); //removemos elevento para usar el objeto mas adelante xhl.removeEventListener("readystatechange",procesarDatosProvincias); //habilitamos de nuevo el select de comunidades document.getElementById("comunidad").disabled =false; }else{ //borramos el select y llamamos al metodo otra vez var child= document.getElementById("provincias"); child.parentNode.removeChild(child); procesarDatosProvincias(); } } }
Y este el servlet:
Código Java:
Ver original
package servlets; import beans.Comunidad; import beans.Provincia; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import modelo.ComunidadesDao; /** * * @author otori */ @WebServlet(name = "provinciasServletForm", urlPatterns = {"/provinciasServletForm"}) public class provinciasServletForm 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 */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) response.setContentType("text/xml;charset=UTF-8"); //recoge el atributode comunidades //recoge mediante el dao la lista de provincias la transforma en XML //y muestra el resultado ComunidadesDao pdao=new ComunidadesDao(); ArrayList<Provincia> provincias=(ArrayList<Provincia>) pdao.obtenerProvincias(id); for(Provincia p: provincias){ respuesta+="<identificador>"+p.getIdProvincia()+"</identificador><nombre>"+p.getNombreProvincia()+"</nombre>"; } respuesta+="</comunidades>"; out.println(respuesta); } } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</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 */ /** * 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 */ /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override return "Short description"; }// </editor-fold> }
Gracias y esperoque alguien pueda ayudarme