2016-01-05 47 views
1

我有一些問題從struts2行動中從angularJS接收價值。AngularJs發送價值到Struts2

目標是接收旋轉木馬中當前圖像的索引。

selectArm.jsp

var app = angular.module('menuAPP', ['ui.bootstrap']); 
     app.controller('mainController', function($scope, $http, $window, $location) { 
      $scope.hideError=true; 
      $scope.show = function() { 


       $scope.currentIndex = $('div.active').index() + 1;//Carousel index 
       var params = "NSlider :"+ $scope.currentIndex; 
       var data = angular.toJson(params) 
       $http({ 
        method: 'post', 
        url: 'showArm', 
        data: 'NSlider =' + data 
       }).success(function(response) 
       { 
        post("formShowBrazo"); 
       }); 
      }; 

ArmAction.java

import javax.servlet.http.HttpSession; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.apache.struts2.ServletActionContext; 

import com.opensymphony.xwork2.Action; 

public class BrazoAction implements Action 
{ 
private static final Logger log = LogManager.getLogger(BrazoAction.class); 
private String NSlider; 

public String execute() throws Exception { 

    HttpSession session = ServletActionContext.getRequest().getSession(); 

    session.setAttribute("forward","sBrazo"); 
    String aux = NSlider.split(":")[1]; //Receive "NSlider : {int}" 
    session.setAttribute("id_brazo", aux); 
    return SUCCESS; 
} 

public String getNSlider() { 
    return NSlider; 
} 

public void setNSlider(String NSlider) { 
    this.nSlider = NSlider; 
} 

}

此JSP必須顯示在轉盤選擇的圖像的索引。

showArm.jsp

<body> 
    <script src="lib/threejs/three.min.js"></script> 
    <script src="lib/threejs/OrbitControls.js"></script> 
    <script src="lib/threejs/dat.gui.min.js"></script> 
    <script src="lib/threejs/stats.min.js"></script> 
    <script src="js/webGL.js"></script>  
    <% 
     out.println(session.getAttribute("id_brazo")); 
    %> 
    <div id='container' width=800, height=600> 
</body> 

如果我調試的動作,我可以看到,我沒有收到任何角度值。

UPDATE 更改了json請願書,更改了get和set的名稱,並且更改爲字符串參數。

現在我收到空值。仍然不能很好地工作。

UPDATE 2 現在顯示最終結果。現在工作正常。

+0

將您的getter和setter更改爲'setNSlider'或更改變量名稱。 –

回答

4

這就是我如何將數據傳遞給Struts動作請參考這一點。

$scope.submitForm = function() { 

     var params = { 
      "name" : $scope.name, 
      "username" : $scope.username, 
      "email" : $scope.email 
     }; 

     var data = angular.toJson(params); 
     $http({ 
      method : 'POST', 
      url : '/angular/studentForm.action', 
      data : 'value=' + data, 
      headers : { 
       'Content-Type' : 'application/x-www-form-urlencoded' 
      } 
     }).success(function(data) { 
      if (data.errors) { 
       $scope.errorname = data.errors.name; 
       $scope.errorUsername = data.errors.username; 
       $scope.erroremail = data.errors.email; 
      } else { 
       console.log(data); 
       $scope.message = data; 

      } 
     }).error(function(data, status) { 
      return false; 
     }); 
    }; 
}); 

您必須將參數更改爲字符串,因爲角度js只適用於json數據。

+0

請傳遞值你想要在動作類相同的名稱,在這裏你傳遞參數命名爲價值,並希望在NSlider得到..試試吧.... $ http({ 方法:'post', URL: 'showArm', 數據: 'NSlider =' +數據 })成功(功能(響應) { 交( 「formShowBrazo」); }); –

+0

它工作。謝謝^^ – Cadeq

0
angular.module("ProductApp", []); 
angular.module("ProductApp").controller("ProController", 

     function($scope, $window, $log, $http) { 
      $log.debug("loading controller"); 
      $scope.productModel = { 
       'name' : '', 
       'type' : '', 
       'company' : '', 
       'price' : 0 
      }; 
      $scope.toServer = function() { 
       $log.debug('starting to server'); 
       var httpJson = { 
        url : '/angular_firstlook/product', 
        method : "POST", 
        params : { 
         'product' : $scope.productModel 
        } 
       }; 
       $http(httpJson).success(function() { 
        $window.alert("sent to server success"); 
        //geeting data from server 
       }).error(function() { 
        $window.alert("sent to server failure"); 
       }); 
      }; 
     }); 
+0

這是我如何發送數據到控制器類誰能告訴我如何檢索 –