2017-07-04 75 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. 

感谢您的帮助