2017-07-04 5 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

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でuser.jsp"(私はJSONを作成するコードを貼り付け)+ 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と試みたが、それは動作しません。 私もここで「$インデックスでトラック」を追加しました:list_user.jspで

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

が、それは動作しません。

もう私はそれをやる方法がわからないので助けてください。

+0

user.jspから 'jdata'をどうやって返しますか? –

答えて

0

あなたの問題は、あなたがjspではなくSERVICEを呼び出すべきであるように見えます。

A JSPはあなたのための新しいWebページを構築し、それはそれを置く:(あなたが好むよう、またはJAX-RSを使用)

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

は、JSPではなく、やってサーブレットを試してみて、あなたを置きますロジックを '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はサーブレットである)

$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()Iと同じですこのコードが含まれていました。

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

サーブレットの問題を解決しましたが、REST APIを呼びたいと思います。 サーブレットを使用しないことをお勧めします。 私のコードを変更します。

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. 

助けてくれてありがとう

関連する問題