2017-03-19 68 views
2

我是AngularJS和Web服務的新手。 我正在做一個程序,從用戶獲取價值 - > [名稱和年齡],並將這些值插入到oracle數據庫。我只能插入一個值。我使用$ http.post傳遞多個值的搜索結果並不理想。 如果有人能提供幫助,這將非常有幫助。 下面的代碼

客戶端代碼

<html> 

<title>My AngularJS App</title> 

<body ng-app="myApp" ng-controller="DBCtrl"> 
<script type ="text/javascript" src="https://ajax.googleapis.co/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
<form ng-submit="insertData()"> 
Student name: <input type = "text" ng-model="name" > 
Student age: <input type= "text" ng-model="age"> 
<br> 
<input type ="submit" value="INSERT"> 

</form> 
<p>{{msg}}</p> 

<script> 

var app = angular.module('myApp',[]); 
app.controller('DBCtrl', function($scope,$http){ 

$scope.insertData = function(){ 

    alert($scope.name); 
    $http.post('rest/DB/add',$scope.name) 
    //$http.get("rest/DB/extract") 
    .success(function(){ 
     $scope.msg="DATA INSERTED"; 

    }) 
    } 
    }); 


    </script> 

    </body> 
    </html> 

服務器端Java代碼

package com.ustri.DBman; 

@Path("/DB") 
public class DBManager { 

@POST 
@Path("/add") 
@Produces(MediaType.TEXT_HTML) 
public void addDetails(String sname,String sage){ 
    System.out.println("IN add"); 

    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");   
     //step3 create the statement object 
     System.out.println("Connection established successfully"); 
     PreparedStatement stmt=con.prepareStatement("insert into studreg values(?,?)"); 
     System.out.println(sname+"+"+sage); 
     stmt.setString(1,sname); 
     stmt.setString(2,sage); 

     int i=stmt.executeUpdate(); 
     System.out.println(i+" records inserted"); 
     con.close(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    } 

    } 

使用此代碼,我只能插入一個價值$ scope.name。 如何修改我的代碼以通過$ http.post將$ scope.name和$ scope.age參數傳遞給Server?

+0

角度應用程序通常發送JSON並接收JSON。你當然可以發送其他東西,並接收HTML,但這使得它比必要的更難。你爲什麼不直接發送和接收JSON? –

+0

@JBNizet是的...這是所有必要的... –

回答

5

使用此代碼我只能插入單個值$ scope.name。 我該如何修改我的代碼,將$ scope.name和$ scope.age parametres通過$ http.post傳遞給Server?

默認情況下,$http後/ get方法通過串行化數據爲JSON改造請求,並與"application/json"內容類型張貼。
儘管您似乎想要使用"application/x-www-form-urlencoded"內容類型發佈數據。

您可以指定"application/x-www-form-urlencoded"內容類型,並在發送之前創建格式正確的數據(在傳輸值之間添加&分隔符)。

否則你可以做得更簡單。
您可以發送一個包含這兩個信息的JS對象。

通過

var postedObj = {'name':$scope.name, 'age':$scope.age} 
$http.post('rest/DB/add',postedObj); 

更換

$http.post('rest/DB/add',$scope.name); 

,並更改根據您的休息控制器。

通過

public void addDetails(Details details){ 

Details其中具有作爲字段所傳輸的兩個值替換

public void addDetails(String sname,String sage){ 

public class Details{ 
    private String name; 
    private String age; 

    // and add getters and setters if required by your JSON/Java mapper. 
} 
相關問題