如何从 AngularJS POST 获取 Struts 1 中的数据 [英] How to get the data in Struts 1 from AngularJS POST

查看:25
本文介绍了如何从 AngularJS POST 获取 Struts 1 中的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Struts1.2 和 AngularJS 来 POST 一些数据,并想在 Java 中获取数据.

我能够从服务器检索数据并将其显示在屏幕上.

现在我正在尝试使用 AngularJS 将一些数据发布到服务器,并尝试使用 Java 中的 request.getParameter() 获取数据.我试了三遍,还是不行.

下面我还提供了以下文件,以及我的三个尝试的解释和屏幕截图.

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 = 数据;}).error(function(data, status, headers, config) {//警报(错误::"+数据);});//第一次尝试$scope.postData = function() {$http({方法:'POST',url: '/StrutsWithAngular/shopingCart.do',数据:'值='+'来自请求的参数',标头:{'Content-Type':'application/x-www-form-urlencoded'}}). 成功(功能(数据,状态,标题,配置){警报(成功::"+状态);$scope.items = 数据;}).错误(功能(数据,状态,标题,配置){警报(错误::"+数据);});};//第二次尝试$scope.postData = function() {$http({方法:'POST',url: '/StrutsWithAngular/shopingCart.do',数据: 'cartValues=' + {cartValues : $scope.items} ,标头:{'Content-Type':'application/x-www-form-urlencoded'}}). 成功(功能(数据,状态,标题,配置){$scope.items = 数据;}).错误(功能(数据,状态,标题,配置){//警报(错误::"+数据);});};//第三次尝试$scope.postData = function() {$http({方法:'POST',url: '/StrutsWithAngular/shopingCart.do',数据:$scope.items}). 成功(功能(数据,状态,标题,配置){$scope.items = 数据;}).错误(功能(数据,状态,标题,配置){//警报(错误::"+数据);});};});

CartAction.java:

package com.myapp.action;导入 com.myapp.dto.ShopingCartDto;导入 java.io.IOException;导入 java.io.PrintWriter;导入 java.util.ArrayList;导入 java.util.List;导入 javax.servlet.http.HttpServletRequest;导入 javax.servlet.http.HttpServletResponse;导入 net.sf.json.JSONArray;导入 org.apache.struts.action.ActionForm;导入 org.apache.struts.action.ActionForward;导入 org.apache.struts.action.ActionMapping;公共类 CartAction 扩展 org.apache.struts.action.Action {私有静态最终字符串成功=成功";/*** 这是从 Struts 框架调用的动作.** @param mapping 用于选择此实例的 ActionMapping.* @param form 此请求的可选 ActionForm bean.* @param request 我们正在处理的 HTTP 请求.* @param response 我们正在处理的 HTTP 响应.* @throws java.lang.Exception* @返回*/@覆盖公共 ActionForward 执行(ActionMapping 映射,ActionForm 表单,HttpServletRequest 请求,HttpServletResponse 响应)抛出异常{System.out.print(购物车应用");String value = request.getParameter(value");System.out.print("值​​::"+值);String requestValue = request.getParameter(cartValues");System.out.print("请求值::"+ requestValue);如果(请求值!=空){System.out.println("请求值::"+requestValue);JSONObject 对象 = JSONObject.fromObject(requestValue);System.out.println("对象键::" +object.keys());迭代器 iter = object.keys();System.out.println("Iter::"+iter.toString());而 (iter.hasNext()){String key = (String) iter.next();System.out.println(键"+键);JSONArray 数组 = object.getJSONArray(key);for (int i = 0; i < array.size(); i++) {JSONObject powertrainOperationJSON = JSONObject.fromObject(array.get(i));}}}列表<对象>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(响应,shopingCartDtos);返回空;}}


第一次尝试:当我尝试在请求中使用单个参数时,我能够在 Java 中获取值

在控制器中:

data: 'value=' + 'Parameter From Request'

在 Java 中:

String value = request.getParameter("value");System.out.print("值​​::"+值);

参数值:

控制台输出:

第二次尝试:

现在,当我试图在 java 中获取一些值时,我不能,在这种情况下,我传递了内容类型为 application/x-www-form-urlencoded 在参数 cartValues 中.在 Java 中,当尝试从 request.getParameter(cartValues") 获取值时,该值将打印为 [object Object] 与请求中一样.但是当试图在 Java 中使用 JSON API 解析值时出现异常

在控制器中:

data: 'cartValues=' + {cartValues : $scope.items} ,标头:{'Content-Type':'application/x-www-form-urlencoded'}

在 Java 中:

 String requestValue = request.getParameter(cartValues");System.out.print("请求值::"+ requestValue);

我第二次尝试的屏幕截图:

第三次尝试:

在这种情况下,我只传递了 $scope.item 并删除了内容类型以将其作为 JSON 传递,但我不清楚如何在 Java 中获取值

在控制器中:

数据:$scope.items

第三次尝试的屏幕截图:

解决方案

使用第二次尝试,在发布数据之前将 scope 转换为 JSON.

这可以通过使用 JSON API 或 AngularJS API 的两种方式完成

我使用了 angular.toJson() 并且我还使用了转义方法来接受特殊字符.

使用 request.getParameter() 您可以在服务器端获取值.希望解决方案对大家有所帮助.

第二次尝试:

$scope.postData = function() {var data = escape(angular.toJson($scope.items));$http({方法:'POST',url: '/StrutsWithAngular/shopingCart.do',数据:'cartValues='+数据,标头:{'Content-Type':'application/x-www-form-urlencoded'}}). 成功(功能(数据,状态,标题,配置){$scope.items = 数据;}).错误(功能(数据,状态,标题,配置){//警报(错误::"+数据);});};

I’m using Struts1.2 with AngularJS to POST some data and want to get the data in 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 AngularJS to the server and trying to get the data with request.getParameter() in Java. I made three tries but I couldn't.

Below I have also provided the following files, with explanation and screenshots of my three tries.

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);
           });
    };
        
});

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

In Controller:

data: 'value=' + 'Parameter From Request' 

In Java:

String value = request.getParameter("value");
 System.out.print("value ::"+ value);

Parameter Value:

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

In Controller:

data: 'cartValues=' + {cartValues : $scope.items} ,
                              headers: {'Content-Type': 'application/x-www-form-urlencoded'}

In 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

In Controller:

data: $scope.items

Screen shot of third try:

解决方案

Using the second try, before posting the data convert scope to JSON.

This can be done either in two ways either using JSON API or AngularJS API

I used angular.toJson() and I also used escape method for accepting special characters.

Using request.getParameter() you can get the value in the sever side. Hope solution helps everybody.

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);
       });
};

这篇关于如何从 AngularJS POST 获取 Struts 1 中的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆