Java 如何从 AngularJS 帖子中获取 Struts 中的数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22881922/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to get the data in Struts from AngularJS post
提问by Arun
I'm using Struts1.2 with Angular to post some data and want to get the data in java.
我正在使用 Struts1.2 和 Angular 来发布一些数据,并希望在 java 中获取数据。
I'm able to retrieve the data from the server and able to display it in the screen.
我能够从服务器检索数据并将其显示在屏幕上。
Now I'm trying to post some data with Angular to the server and trying to get the data from request.getParameter
in java. I made three tries but i couldn't.
现在我正在尝试使用 Angular 将一些数据发布到服务器并尝试从request.getParameter
java 中获取数据。我试了三遍,还是不行。
Below I have also provided the following files, with explanation and screenshots of my three tries.
下面我还提供了以下文件,以及我的三个尝试的解释和屏幕截图。
1. CartController.js
1. CartController.js
var myApp = angular.module('cartApp',[]);
myApp.controller('CartController', function ($scope,$http) {
$scope.bill = {};
$scope.items = [];
$http.post('/StrutsWithAngular/shopingCart.do')
.success(function(data, status, headers, config) {
$scope.items = data;
})
.error(function(data, status, headers, config) {
//alert("Error :: "+data);
});
// First Try
$scope.postData = function() {
$http({
method: 'POST',
url: '/StrutsWithAngular/shopingCart.do',
data: 'value=' + 'Parameter From Request' ,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data, status, headers, config) {
alert("Success :: "+status);
$scope.items = data;
}).error(function(data, status, headers, config) {
alert("Error :: "+data);
});
};
// Second Try
$scope.postData = function() {
$http({
method: 'POST',
url: '/StrutsWithAngular/shopingCart.do',
data: 'cartValues=' + {cartValues : $scope.items} ,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data, status, headers, config) {
$scope.items = data;
}).error(function(data, status, headers, config) {
// alert("Error :: "+data);
});
};
// Third try
$scope.postData = function() {
$http({
method: 'POST',
url: '/StrutsWithAngular/shopingCart.do',
data: $scope.items
}).success(function(data, status, headers, config) {
$scope.items = data;
}).error(function(data, status, headers, config) {
// alert("Error :: "+data);
});
};
});
2. CartAction.java
2. CartAction.java
package com.myapp.action;
import com.myapp.dto.ShopingCartDto;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class CartAction extends org.apache.struts.action.Action {
private static final String SUCCESS = "success";
/**
* This is the action called from the Struts framework.
*
* @param mapping The ActionMapping used to select this instance.
* @param form The optional ActionForm bean for this request.
* @param request The HTTP Request we are processing.
* @param response The HTTP Response we are processing.
* @throws java.lang.Exception
* @return
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.print("Cart App");
String value = request.getParameter("value");
System.out.print("value ::"+ value);
String requestValue = request.getParameter("cartValues");
System.out.print("Requested Values ::"+ requestValue);
if(requestValue!=null){
System.out.println("Requested Values :: "+requestValue);
JSONObject object = JSONObject.fromObject(requestValue);
System.out.println("Object Keys ::" +object.keys());
Iterator iter = object.keys();
System.out.println("Iter :: "+iter.toString());
while (iter.hasNext())
{
String key = (String) iter.next();
System.out.println("Keys " + key);
JSONArray array = object.getJSONArray(key);
for (int i = 0; i < array.size(); i++) {
JSONObject powertrainOperationJSON = JSONObject.fromObject(array.get(i));
}
}
}
List<Object> shopingCartDtos = new ArrayList<>();
ShopingCartDto shopingCartDtoOne = new ShopingCartDto();
ShopingCartDto shopingCartDtoTwo = new ShopingCartDto();
ShopingCartDto shopingCartDtoThree = new ShopingCartDto();
shopingCartDtoOne.setSno(1);
shopingCartDtoOne.setTitle("Title 1");
shopingCartDtoOne.setQuantity("11");
shopingCartDtoOne.setPrice("25");
shopingCartDtoTwo.setSno(2);
shopingCartDtoTwo.setTitle("Title 2");
shopingCartDtoTwo.setQuantity("12");
shopingCartDtoTwo.setPrice("25");
shopingCartDtoThree.setSno(3);
shopingCartDtoThree.setTitle("Title 3");
shopingCartDtoThree.setQuantity("13");
shopingCartDtoThree.setPrice("25");
shopingCartDtos.add(shopingCartDtoOne);
shopingCartDtos.add(shopingCartDtoTwo);
shopingCartDtos.add(shopingCartDtoThree);
ajaxResponse(response, shopingCartDtos);
return null;
}
}
/////
/////
First try:when I tried with single parameter in the request I'm able to get the value in java
第一次尝试:当我尝试在请求中使用单个参数时,我能够在 java 中获取值
In Controller:-
在控制器中:-
data: 'value=' + 'Parameter From Request'
In Java:-
在 Java 中:-
String value = request.getParameter("value");
System.out.print("value ::"+ value);
Parameter Value: Screen Shot
参数值:屏幕截图
Console Output
控制台输出
Second try:
第二次尝试:
Now when I tried to get some bunch of values in java I couldn't , here in this case I have passed $scope.item with the content type “application/x-www-form-urlencoded” in the parameter “cartValues”. In java when tried to get the value from request.getParameter(“cartValues”) the value is getting printed as [object Object] as in the request. But when tried to parse the value using JSON api in java there is an exception
现在,当我尝试在 java 中获取一些值时,我不能,在这种情况下,我在参数“cartValues”中传递了内容类型为“application/x-www-form-urlencoded”的 $scope.item。在 java 中,当尝试从 request.getParameter(“cartValues”) 获取值时,该值将打印为 [object Object] 与请求中的一样。但是当尝试在 Java 中使用 JSON api 解析值时出现异常
In Controller:-
在控制器中:-
data: 'cartValues=' + {cartValues : $scope.items} ,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
In Java:-
在 Java 中:-
String requestValue = request.getParameter("cartValues");
System.out.print("Requested Values ::"+ requestValue);
Screenshot of my second try
我第二次尝试的截图
Third try:
第三次尝试:
In this case I passed only the $scope.item and removed the content type to pass it as JSON, but I don't have a clear idea how to get the value in Java
在这种情况下,我只传递了 $scope.item 并删除了内容类型以将其作为 JSON 传递,但我不清楚如何在 Java 中获取值
In Controller:-
在控制器中:-
data: $scope.items
Screen shot of third try
第三次尝试的屏幕截图
采纳答案by Arun
Using the second try, before posting the data convert scope to json
使用第二次尝试,在发布数据之前,将范围转换为 json
This can be done either in two ways either using JSON api or Angular api
这可以通过使用 JSON api 或 Angular api 的两种方式完成
I used angular.toJson() and I also used escape method for accepting special characters.
我使用了 angular.toJson() 并且我还使用了转义方法来接受特殊字符。
Using request.getParameter you can get the value in the sever side. Hope solution helps everybody.
使用 request.getParameter 您可以在服务器端获取值。希望解决方案对大家有帮助。
// Second Try
// 第二次尝试
$scope.postData = function() {
var data = escape(angular.toJson($scope.items));
$http({
method: 'POST',
url: '/StrutsWithAngular/shopingCart.do',
data: 'cartValues='+data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data, status, headers, config) {
$scope.items = data;
}).error(function(data, status, headers, config) {
// alert("Error :: "+data);
});
};
回答by MBielski
Angular does not POST form data, it transmits a JSON object to the server. For information on JSON itself, see JSON.org. There are also a wealth of libraries listed on that page (towards the bottom) that let you parse JSON in various languages, including Java. Not being a Java developer, I can't say that one of them is better than the other, but you should be able to get a good idea of suitability by reading the docs on each one.
Angular 不会 POST 表单数据,它会向服务器传输一个 JSON 对象。有关 JSON 本身的信息,请参阅JSON.org。该页面(底部)还列出了大量库,可让您解析各种语言(包括 Java)的 JSON。不是 Java 开发人员,我不能说其中一个比另一个更好,但是您应该能够通过阅读每个文档的文档来很好地了解适用性。
回答by ramas jani
It is not data that you should use params
instead of data tag.
它不是您应该使用params
的数据而不是数据标签。
$scope.postData = function() {
var data = escape(angular.toJson($scope.items));
$http({
method: 'POST',
url: '/StrutsWithAngular/shopingCart.do',
params: 'cartValues='+data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(data, status, headers, config) {
$scope.items = data;
}).error(function(data, status, headers, config) {
// alert("Error :: "+data);
});
};