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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 18:39:37  来源:igfitidea点击:

How to get the data in Struts from AngularJS post

javaangularjsjsonstruts-1

提问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.getParameterin java. I made three tries but i couldn't.

现在我正在尝试使用 Angular 将一些数据发布到服务器并尝试从request.getParameterjava 中获取数据。我试了三遍,还是不行。

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

参数值:屏幕截图

Parameter Value

参数值

Console Output

控制台输出

System Out

系统输出

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

我第二次尝试的截图

Object in Request

请求中的对象

Object in Request With Exception

请求中的对象有异常

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

第三次尝试的屏幕截图

Thrid Try with JSON

使用 JSON 进行三次尝试

采纳答案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 paramsinstead 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);
   });
};