通过 JSTL 访问 Post 数据 - Angular $post

Posted

技术标签:

【中文标题】通过 JSTL 访问 Post 数据 - Angular $post【英文标题】:Accessing Post Data via JSTL - Angular $post 【发布时间】:2014-10-16 14:07:45 【问题描述】:

如何通过 JSTL 将Request Payload 数据打印到页面?

在上图中,我正在向jstl 控制器发送帖子。现在我可以轻松访问查询字符串参数,例如$param.test 会打印出测试参数。

但我不确定如何访问请求有效负载中的数据我尝试了 $requestScope 对象$requestScope.PAY,但数据似乎不存在。

是否存在保存这些数据的可访问对象?如果不是,最好的解决方法是什么?

更新

我不知道有多相关,但我正在使用 angular 的 $http.post 进行通话。

【问题讨论】:

尝试同样的方法$param.PAY @JigarJoshi 不幸的是,这对我也不起作用。你知道为什么会这样吗? 查看this question,我认为OP与您的情况相同。还有一个解决方案(在使用详细示例之前,请阅读 cmets belwo wrt 编码问题),但是您必须在 servlet 中对该解决方案进行编码,因为应该避免将 Java 代码添加到 JSP。 为了澄清之前的评论:您在此处看到的“请求有效负载”实际上是请求的主体,因此您需要一种从请求中提取主体的方法。无法通过标头或参数访问它。 @fvu 这个问题可以通过发起帖子的方式来解决吗?我正在查看您提供的链接中的评论:It'd be interesting to see the javascript code sending the request. It's apparently composing the request parameters in a wrong way. – BalusC 如果可能的话,我想在转到servlet 解决方案之前更正帖子方面的问题。我很感激这些信息 【参考方案1】:

两种选择:

1) 发送请求时,将其作为 content-type 发送,等于“application/x-www-form-urlencoded”而不是“text/json”,然后您可以使用 $param. PAY 就像它是一个查询字符串参数一样。 “application/x-www-form-urlencoded”是您发布 html 表单时的默认编码。

-或者如果这不是一个选项,因为您不控制请求方-

2) 您将需要使用 servlet 或 JSP scriptlet 来访问内容,如以下问题所示:HttpServletRequest get JSON POST data

【讨论】:

感谢您的信息,不幸的是,仅更改 content-type 对我不起作用我还必须使用 jQuery's $.param() 函数对数据执行转换,如下所示:***.com/questions/12190166/…【参考方案2】:

您要做的是将 Angular 中的 post 请求转换为 application/x-www-form-urlencoded。所以在你的应用程序中你会做这样的事情。

var app = angular.module('myAapp', [])
    app.config(function($httpProvider) 
        $httpProvider
        .defaults
        .headers
        .post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

    $httpProvider.defaults.transformRequest = [function (data) 
        return angular.isObject(data) && String(data) !== '[object File]' ? jQuery.param(data) : data;
    ];
    )

这应该可行。

【讨论】:

您正在使用 jQuery.param 函数,适合那些寻找 javascript 替代方案的人。见:***.com/a/5505137/1022305

以上是关于通过 JSTL 访问 Post 数据 - Angular $post的主要内容,如果未能解决你的问题,请参考以下文章

使用 jstl 访问 url 参数

杂记-格式化Date默认格式,日期加一天,jstl判断字符类型,ajax模拟from表单后台跳转页面,jstl访问数据库并在页面显示

[Angularjs]$http.post与$.post

JSTL

9.EL表达式 和 JSTL核心标签库

从数据库提取数据通过jstl显示在jsp页面上