2012-11-05 3 views
1

Je me pose une question que comment puis-je envoyer un objet JSON de Springs MVC afin que je puisse le convertir en un objet JavaScript sur ma page HTML.Springs MVC JSON Réponse et le convertir en objet JS

D'une manière traditionnelle, je le fais: Voici un extrait de Java Servlet qui définit un attribut de requête et le transmet à la page JSP.

JSONObject jsonObj = new JSONObject(); 
    jsonObj.put("name","test"); 
    jsonObj.put("age",24); 
    request.setAttribute("jsonObj",jsonObj); 
    request.getRequestDispatcher("test.jsp").forward(request,response); 

Dans JSP je récupère comme:

<script type="text/javascript"> 
    var jsonObj =<%=request.getAttribute("jsonObj"); %>; 
    alert("name = "+jsonObj.name+" ; age = "+jsonObj.age); // This will output name and age from the JSON Object 
    </script> 

Alors ce que je dois demander comment puis-je faire la même chose à Springs MVC. Comment puis-je envoyer le JSONObject de la servlet Dispatcher et le convertir en objet JS dans ma page JSP?

Répondre

4

Un moyen facile de le faire en utilisant l'ObjectMapper. Il va créer une chaîne JSON à partir de votre objet. Et que vous pouvez envoyer à votre avis/jsp.

Je mets un petit exemple de contrôleur que je fais (juste coupé). Vous pouvez bien sûr créer votre objet JSON dans votre compoller étape par étape comme vous l'avez fait dans votre exemple. Ensuite, vous n'avez pas besoin du mappeur, il suffit d'envoyer la chaîne à votre vue.

Dans la JSP que vous chargez la chaîne JSON comme celui-ci dans un JS var:

var jsonString = '${userSettingsJSON}'; 

Pour obtenir des éléments de chaîne ou JSON Parse, voir: http://www.json.org/js.html.
Je suis un ventilateur de cadre KnockOut le ferait avec elle.

+0

excellente réponse ... que ce que je cherchais exactement. –

+0

vous êtes les bienvenus !! – derlinuxer

0

Une manière beaucoup plus facile de faire ceci est d'inclure les dépendances Jackson dans maven et d'utiliser @ResponseBody pour renvoyer une représentation JSON de l'objet, sans avoir à écrire manuellement la manipulation.

Jetez un oeil à l'exemple ci-dessous, vous ne devriez pas avoir à écrire de traduction en code JSON.

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/

+0

Sir..Merci pour cela, mais j'ai déjà regardé dans cet exemple, et il retourne un objet JSON, j'ai besoin qu'il soit capturé comme un objet JavaScript afin que je puisse voir et mettre en conséquence sur mon DOM en utilisant jQuery/JS. –

+0

jQuery convertit automatiquement JSON en objet JS lorsque vous spécifiez 'type: 'json'' dans l'appel' .ajax'. Regarde les documents jQuery pour plus de détails. – nickdos

+0

Cher Monsieur, J'avais besoin que la page JSP soit retournée en réponse, mais cet exemple renvoie l'objet JSON et non la page JSP. Et je le sais très bien que jQuery peut capturer l'objet JSON en tant qu'objet JS. –

2

Je pense que vous devriez utiliser ajax (par exemple jquery), ce qui suit est le printemps mvc

@RequestMapping(value = "/admin/new/list", method = RequestMethod.GET) 
@ResponseBody 
public List<News> list() 
{ 
    return newsDao.findAll(); 
} 

et dans la page jsp, vous pouvez utiliser ajax util (par exemple jquery)

$.ajax({ 
      type: "GET", 
      url: '<c:url value="/admin/new/list"/>', 
      cache:false, 
      dataType :'json', 
      success: function(data){ 
       alert(data);    
      } 
    }); 

les données objet JSON Je ne sais pas si ce qui précède est ce que vous

+0

Je ne cherche pas AJAX Appel du tout, je sais que c'est une autre façon. Mais ce n'est pas ce que je veux exactement. –

0

En fonction de vos besoins, je vous suggère d'utiliser l'appel AJAX avec JSON comme type de données.

Par exemple:

$.ajax({ 
        url: "getFormatIdDescMap?compId="+compId, 
        global: false, 
        type: "POST", 
        dataType:"json", 
        contanttype:'text/json', 
        async:false, 
        error:function(){ 
         alert("Error during retrieving the foramt ID List"); 
        }, 
        success: function(data){             
         //REMOVE ALL THE OLD VALUES OF FORMAT DROP DOWN 
         removeDropDownVals('formatList'); 

         var optn; 
         for(var index=0;index<data.formatKeys.length;index++){ 
          optn = document.createElement("option"); 
          document.getElementById("formatList").options.add(optn); 
          optn.text =data.formatDescs[index]; 
          optn.value=data.formatKeys[index]; 
         } 
        } 
       }); 

      }); 

Dans le code ci-dessus, je prépare une nouvelle liste de formats basés sur l'ID de l'entreprise. Vous pouvez itérer sur la réponse.

Il donnera le texte de réponse selon vos besoins. Mais ici, notez que ..Si vous obtenez json Array dans la réponse, il contiendra ces données entre crochets comme .. [1,2,3] et si vous obtenez une réponse dans l'objet JSON, il sera affiché entre accolades comme {"data" , [1,2,3]}.

Questions connexes