2017-03-19 7 views
2

AngularJSとWebサービスの初心者です。 私はユーザーから値を取得するプログラムを実行しています - > [名前と年齢]とそれらの値をoracleデータベースに挿入します。私は1つの値を挿入することしかできませんでした。 $ http.postを使用して複数の値を渡す検索がうまく行かなかった。 誰かが助けてくれると大変助かります。 は、ここで私は、単一の値$ scope.nameを挿入することができる午前コード

クライアント側のコードにこのコードを使用して

<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と$ scope.ageパラメータを$ http.postからServerに渡すようにコードを変更するにはどうすればよいですか?

+0

角度アプリケーションは、通常JSONを送信し、JSONを受信します。もちろん、何か他のものを送ることができ、HTMLを受け取ることができますが、これは必要以上に難しくなります。 JSONを送受信してみませんか? –

+0

@JBNizetはい...それはすべて必要でした... –

答えて

5

このコードを使用して、1つの値$ scope.nameのみを挿入できます。 $ scope.nameと$ scope.ageの両方を渡すようにコードを変更するには パラメータは$ http.postからServerに渡しますか?デフォルトでは

$httpポスト/メソッドは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); 

を交換し、に従って、あなたの残りのコントローラを変更します。

Detailsは、2つの送信された値をフィールドとして有する

public void addDetails(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. 
} 
関連する問題