2016-08-22 93 views
1

我想從spring控制器返回json對象列表,並在視圖中使用它,但它返回空列表! 我無法理解問題。 我在minutesController中創建活動對象並將其作爲json.But返回,但我無法使用jquery在表單中獲取它。 但我可以在瀏覽器中看到正確的結果,當我嘗試localhost:8080/FitnessTracker5/activities.json。 我的服務器是GlassFish從spring mvc控制器返回json對象列表

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

你在ajax調用中使用'.json'的具體原因是什麼? –

+1

你在Javascript中嘗試過斷點嗎?你的ajax回調中的「數據」的價值是什麼? – marthursson

+0

@marthursson它似乎無法獲得「jquery-3.1.0.js」!我檢查了鉻控制檯,它有錯誤...我應該做一些其他的事情來添加它? – faraa

回答

2

從上面的註釋看來,問題在於JQuery無法加載,這可能是由於配置錯誤的調度程序servlet。你可以嘗試從CDN訪問的jQuery代替:

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

如果你想爲你的應用程序的jQuery,你應該谷歌爲「服務靜態資源Spring MVC的」 :)

並添加http://url

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

謝謝你......但是現在我在chrome中得到這個錯誤:XMLHttpRequest無法加載localhost:8080/FitnessTracker5/activities.json?ajax = true。交叉源請求僅支持協議方案:http,data,chrome,chrome -...以及firefox中的空列表無錯誤 – faraa

+1

問題已通過添加http:// ...您 – faraa

0

使用@RestController代替@Controller

+0

謝謝,但我明白這個問題是加載jqueru ..我看到錯誤在鉻控制檯的行是添加jQuery ...你能幫我嗎? – faraa

+0

與整體答案無關,但您還需要使用@ResponseBody註釋該方法來設置控制器以避免查看jsp頁面。 –