2017-07-04 45 views
1

我有angularjs和JSON的一個問題。Angularjs意外標記JSON

這是我的代碼。

list_user.jsp(這是網頁,我打印表格)

<tr ng-repeat="per in persons"> 
    <td>{{ per.user }}</td> 
    <td>{{ per.password }}</td> 
    <td>{{ per.profile }}</td> 
</tr> 

controller.js

$http({ 
     method : 'POST', 
     url : 'views/user/user.json' 
    }).success(function(data){ 
     $scope.persons = data; 
    }); 

user.json

[ 
     { 
      "user": "Quarterback", 
      "password": 5, 
      "profile": "ppp"   
     }, 
     { 
      "user": "Wide Receiver", 
      "password": 89, 
      "profile": "oooo" 
     } 
    ] 

這樣的表生成正確,但JSON是固定的。 現在,我將粘貼有,我想通過從查詢到他們

controller.js

$http({ 
     method : 'POST', 
     url : 'views/user/user.jsp' 
    }).success(function(data){ 

     /* 
     var jsonStr="your json string"; 
     var json=JSON.stringify(data); 
     json=JSON.parse(json) 
     console.log(json); 
     */ 
     console.log(data); 
     $scope.persons = data; 
    }); 

之間的代碼打印數據的代碼/ *。* /離開他們去證實我也試過這條路,但沒有成功。

user.jsp

JSONArray jdata = new JSONArray(); 
UserRest as = new UserRest(); 
jdata = as.getAll(); 
logger.info("jdata in user.jsp "+jdata); 

UserRest.class(只是貼在我創建JSON的代碼)

while (iter.hasNext()) { 
     User ut = (User) iter.next(); 
     JSONObject jtemp = new JSONObject(); 
     jtemp.put("user", ut.getUserName()); 
     jtemp.put("password", ut.getPassword()); 
     jtemp.put("profilo", ut.getProfilo()); 
     jarray.put(jtemp); 
    } 
    return jarray; 

logger.info的 「user.jsp jdata在」 結果(+ jdata)在user.jsp

jdata in user.jsp [{"user":"aaaaaaa","password":"1111111","profile":"0"},{"user":"bbbbbbbb","password":"222222222","profile":"1"}] 

正如你可以看到JSON看起來是一樣的,但是當在瀏覽器中我稱之爲list_user.jsp p年齡在控制檯中值「數據」在controller.js返回我

<? Xml version = "1.0" encoding = "utf-8"?> 

我也試圖與JSON.parse或JSON.stringify但它不工作。 我也「由$指數跟蹤補充說:」在這裏:

<tr ng-repeat = "for people track by $ index"> 
在list_user.jsp

,但它不工作。

請幫助我,因爲我不知道該怎麼做了。

+0

如何從user.jsp返回'jdata'? –

回答

0

那麼,你的問題似乎是,你應該調用一個服務,而不是一個jsp。

一個JSP建立你一個新的網頁,所以它會把認爲:

< ? Xml version = "1.0" encoding = "utf-8"? > 

嘗試這樣做,而不是一個jsp,一個servlet(或使用JAX-RS,根據您的喜好),並把你'doGet'方法中的邏輯(再次,或使用JAX-RS)。

做一個簡單的事情,像

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { 
response.getWriter().append(your working JSON properly hardcoded); 
} 

這種方式應該工作。然後把你的服務邏輯放在那裏。

0

非常感謝你@inigoD,我解決了我的問題。 遵循新的代碼。

controller.js(UserRest是servlet)

$http({ 
     method : 'POST', 
     url : 'UserRest' 
    }).success(function(data){ 
     $scope.persons = data; 
    }); 

的web.xml

<servlet> 
     <servlet-name>UserRest</servlet-name> 
     <servlet-class>"path application".UserRest</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>UserRest</servlet-name> 
     <url-pattern>/UserRest</url-pattern> 
    </servlet-mapping> 

UserRest.class

@Override 
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
     doPost(request,response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { 
     try 
     { 
      JSONArray jdata = new JSONArray(); 
      jdata = getAll(); 

      logger.info("prima del response "+jdata); 

      response.setContentType("application/json"); 
      response.getWriter().write(jdata.toString()); 

     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 

函數GETALL()是相同的我已粘貼,其中包含此代碼。

while (iter.hasNext()) { 
     User ut = (User) iter.next(); 
     JSONObject jtemp = new JSONObject(); 
     jtemp.put("user", ut.getUserName()); 
     jtemp.put("password", ut.getPassword()); 
     jtemp.put("profilo", ut.getProfilo()); 
     jarray.put(jtemp); 
    } 
    return jarray; 
0

我解決了servlet的問題,但我想調用一個REST API。 我更喜歡不要使用servlet。 我更改我的代碼。

controller.js

angular.module('inspinia') 
.controller("DataTable",['$scope','$http',function($scope,$http){ 
$http({ 
     method : 'GET', 
     url : '/api/utenti' 
    }).success(function(data){ 
     $scope.persons = data; 
    }); 

的web.xml

<servlet> 
     <servlet-name>SpringServlet</servlet-name> 
     <servlet-class>com.xxx.yyy.userInterface.servlet.SpringServlet</servlet-class> 
     <load-on-startup>3</load-on-startup> 
    </servlet> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet-mapping> 
     <servlet-name>SpringServlet</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 

UtentiController.class

@Path("/utenti") 
@Component 
@Scope("request") 
public class UtentiController { 

    @GET 
    @Produces("application/json") 
    public JSONArray getAll() { 
     /* call the interface that return a json */ 

     return jarray; 
    } 
} 

在控制檯中的錯誤是:

HTTP Status [404] – [Not Found] 

Type Status Report 

Message /api/utenti/ 

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. 

感謝您的幫助