1

我对 angularjs 和 JSON 有疑问。

这是我的代码。

list_user.jsp(这是我打印表格的页面)

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

控制器.js

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

用户.json

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

这样表就正确生成了,但是json是固定的。现在我将通过从查询中获取数据来粘贴我想要打印数据的代码

控制器.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;
    });

/ * .. * / 之间的代码让他们表明我也尝试过那条路但没有成功。

用户.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("jdata in user.jsp "+jdata) in user.jsp 的结果

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

如您所见,json 看起来相同,但是当在浏览器中我在控制台中调用 list_user.jsp 页面时,controller.js 中的值“data”返回给我

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

我也尝试过使用 JSON.parse 或 JSON.stringify 但它不起作用。我还在这里添加了“按 $ 索引跟踪”:

<tr ng-repeat = "for people track by $ index">

在 list_user.jsp 但它不起作用。

请帮助我,因为我不知道该怎么做。

4

3 回答 3

0

好吧,您的问题似乎是您应该调用 SERVICE,而不是 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);
}

这种方式应该有效。然后把你的服务逻辑放在那里。

于 2017-07-04T08:31:33.677 回答
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>

用户休息类

@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;
于 2017-07-04T19:28:08.687 回答
0

我用 servlet 解决了这个问题,但我想调用一个 REST api。我更喜欢不使用 servlet。我改变我的代码。

控制器.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.

谢谢你的帮助

于 2017-07-05T22:10:35.007 回答