4 votes

Comment faire un appel AJAX dans un projet Spring MVC/WebFlow ?

J'aimerais faire un appel AJAX à un contrôleur Spring MVC à partir d'une vue dans un flux SWF. Je dois le faire dans le conteneur de portlet plutôt que dans un servlet situé à l'extérieur de la session du portlet.

J'ai essayé d'utiliser <portlet:resourceURL id="myAjax"/> et en utilisant @ResourceMapping dans la classe Spring Controller, mais cela interfère avec le SWF FlowHandler lorsqu'il tente de traiter la requête.

Ce que je veux faire est-il possible ? Si oui, quelqu'un a-t-il des conseils à me donner ?

Gracias.

0voto

will Points 32

Dans mon flux web printanier view-state1, j'ai ceci :

<script type="text/javascript">
        function getInfoPersona(tipoSearch) {
            dojo.require("dojox.widget.Standby");

            if(tipoSearch == 'cedula'){
                var param = document.getElementById('cedula').value;
                if(!param){
                    return alert('Escriba una cédula');
                }
            }else{
                var param = document.getElementById('numero').value;
                if(!param){
                    return alert('Escriba un número');
                }               
            }
           var url = "/application/personae/info/"+tipoSearch+"/"+param+".json";            

           var standby = new dojox.widget.Standby({target: "loadingInfo"});
           document.body.appendChild(standby.domNode);
           standby.startup();           
            standby.show();
            dojo.xhrGet({
            // URL del recurso en el servidor
            url: url, 
            handleAs: "json",
            timeout: 5000, // Time in milliseconds

            // The LOAD function will be called on a successful response.
            load: function(response, ioArgs) { //
                if(response.nombre){
                    document.getElementById('infoPersona').innerHTML = '<ul>'+
                        //'<li>Estatus: '+response.estatus+'</li>'+         
                        '<li>Nombre: '+response.nombre+'</li>'+
                                '<li>Centro: '+response.centro+'</li></ul>';

                        if(tipoSearch == "cedula"){
                            if( response.numero > 0){
                                document.getElementById("numero").value = response.numero;
                                //document.getElementById("numero").readOnly = true;
                                document.getElementById("buttonSearchNumero").disabled = true;
                            }else{
                                //document.getElementById("numero").value = '';
                                document.getElementById("numero").readOnly = false;
                                document.getElementById("buttonSearchNumero").disabled = true;                              
                            }
                        }

                        if(tipoSearch == "numero"){
                            document.getElementById("cedula").value = response.cedula;
                            document.getElementById("cedula").readOnly = true;
                            document.getElementById("buttonSearchCedula").disabled = true;
                        }

                        if(response.ambito != ''){
                            document.getElementById('ambito').value = response.ambito;  
                        }

                        document.getElementById('twitter').value = response.twitter;

                        document.getElementById('correo').value = response.email;                           

                        document.getElementById('numeroTelefono').value = response.telefono;

                        if(response.parroquiaId > 0){
                            seleccionarMunicipioParroquia(response.parroquiaId, response.municipioId);                              
                        }

                        document.getElementById('infoPersona').style.visibility = 'visible';    
                        document.getElementById('success').disabled = false;
                }else{
                    if(tipoSearch == 'cedula'){
                        document.getElementById('infoPersona').innerHTML = 'No se encontraron datos';
                        document.getElementById('success').disabled = true;
                    }else{
                        document.getElementById('infoPersona').innerHTML = 'No se encontraron datos para el número de escrito';                     
                    }    
                    document.getElementById("buttonSearchCedula").disabled = false;
                    document.getElementById("buttonSearchNumero").disabled = false;
                }
                standby.hide();  
                document.getElementById('infoPersona').style.visibility = 'visible';    

            },

            // The ERROR function will be called in an error case.
            error: function(response, ioArgs) { // 
              console.error("HTTP STATUS CODE: ", ioArgs.xhr.status); //
              dojo.byId("infoPersona").innerHTML = 'No se pudo cargar la información básica de la persona'; //
              standby.hide();
              document.getElementById('infoPersona').style.visibility = 'visible';            
              return response; // 
              }
            }); 
          }
      </script> 

et mon contrôleur :

@RequestMapping(value = "/info/cedula/{cedula}.json", method = RequestMethod.GET, produces = "application/json")
    @ResponseBody
    public InfoPersona getPersonaAsJson(@PathVariable("cedula") Integer cedula) {

        InfoPersona te = new InfoPersona();
        Persona v = Persona.findPersonaByCedulaEquals(cedula);

        if(v == null){
            return te;
        }

        setDataPersona(v.getPersonaId(), te);

        te.setTipoBusqueda("cedula");

        if(!telefonosString.equals("")){
            //eliminar la coma final
            telefonosString = telefonosString.substring(0, telefonosString.length() - 1);
            te.setAllTelefonos(telefonosString);
        }

        te.setTelefonos(numeros);

        return te;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X