2016-08-22 6 views
1

Я хочу вернуть список объектов json из контроллера Spring и использовать его в поле зрения, но он возвращает пустой список! Я не могу понять проблему. Я создаю объекты деятельности в minutesController и возвращаю его как json. Но я не могу получить его в форме с помощью jquery. Но я могу видеть правильный результат в браузере при попытке localhost: 8080/FitnessTracker5/activities.json. Мой сервер GlassFishreturn json object list from spring mvc controller

addMinutes.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
    <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
    <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
    <html> 
    <head> 
     <title>Add Minutes Page</title> 
     <script type="text/javascript" src="/WEB-INF/pages/jquery-3.1.0.js"></script> 
     <script type="text/javascript"> 
     $(document).ready(
       function(){ 
       $.getJSON('localhost:8080/FitnessTracker5/activities.json' , { 

        ajax:'true' 
        } 
        , 
        function(data){ 
        var html = '<option value="">please select one--</option>' 
        var len = data.length; 

        for(var i=0 ; i<len ;i++){ 
         html += '<option value="' + data[i].desc + '">' 
         +data[i].desc+ '</option>' ; 
        } 
        html +='</option>'; 
        $('#activities').html(html); 

        }); 
       }); 

     </script> 
    </head> 
    <body> 
    <h1>Add Minutes Excersisedddd:</h1> 


    Language:<a href="?language=en">English</a> | <a href="?language=fa">Persian</a> 
    <form:form commandName="exercise"> 

     <table> 
     <tr> 

      <td><h1><spring:message code="goal.text"/> </h1> </td> 
      <td> <form:input path="minutes"/></td> 
      <td> 
      <form:select id="activities" path="activity"></form:select> 
      </td> 

     </tr> 


     </table> 
    </form:form> 



    </body> 
    </html> 

activiity.java

public class Activity { 
    private String desc ; 
    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 


} 

MinutesController.java @Controller

public class MinutesController { 

    @RequestMapping(value = "/addMinutes") 
    public String addMinutes(@ModelAttribute("exercise") Exercise exercise){ 
     System.out.println("exercise" + exercise.getMinutes()); 
     System.out.println("exerciseeeee" + exercise.getActivity()); 
     return "addMinutes" ; 
    } 

    @RequestMapping(value = "/activities" , method = RequestMethod.GET) 
    public @ResponseBody List<Activity> findAllActivities(){ 
     System.out.print("ACCCCCCCCCCCCCCCCCCCCc"); 
    List<Activity> activities = new ArrayList<Activity>(); 

     Activity run = new Activity(); 
     run.setDesc("Run"); 
     activities.add(run) ; 

     Activity bike = new Activity(); 
     bike .setDesc("Bike"); 
     activities.add(bike) ; 

     Activity swim = new Activity(); 
     swim.setDesc("Swim"); 
     activities.add(swim) ; 

     return activities; 


    } 

    @RequestMapping(method=RequestMethod.GET, value ="/test") 
    public @ResponseBody Activity getMovie(){ 

     Activity activity =  new Activity(); 
     activity.setDesc("aaaaa"); 
     return activity; 
    } 
} 
+0

Любая конкретная причина, по которой вы используете '.json' в своем аякс-звонке ?? –

+1

Вы пробовали точку останова в своем Javascript? Какова ценность «данных» в вашем обратном вызове ajax? – marthursson

+0

@marthursson кажется, что он не может получить «jquery-3.1.0.js»! Я проверил хром-консоль, и у нее есть ошибка ... Должен ли я сделать что-то еще, чтобы добавить ее? – faraa

ответ

2

Из вашего комментария выше появляется проблема в том, что JQuery не может быть загружен, что, вероятно, связано с неправильно сконфигурированным сервлетом диспетчера. Вы можете попробовать доступ к JQuery из CDN вместо:

<script type="text/javascript" src="//code.jquery.com/jquery-3.1.0.min.js"></script> 

Если вы хотите, чтобы служить JQuery из вашего приложения, вы должны Google для «служат статические ресурсы Spring MVC» :)

И добавить http:// в url ,

$.getJSON('http://localhost:8080/FitnessTracker5/activities.json' , { 
+0

Спасибо ... Но теперь я получаю этот erro в chrome: XMLHttpRequest не может загрузить localhost: 8080/FitnessTracker5/activities.json? Ajax = true. Запросы на кросс-начало поддерживаются только для схем протокола: http, data, chrome, chrome -.......... и еще пустой список в firefox без ошибок – faraa

+1

Проблема решена путем добавления http: // ... Thank вы – faraa

0

Использование @RestController вместо @Controller.

+0

Thank's Но я понял, что проблема заключается в загрузке jqueru..I вижу ошибку в консоли Chrome в строке, добавляющей jquery ... Можете ли вы мне помочь? – faraa

+0

не относится к общему ответу, но вам нужно также аннотировать метод с помощью @ResponseBody, чтобы установить контроллер, чтобы не смотреть на страницу jsp. –