当前位置: 首页 > 面试题库 >

如何将Struts2动作类中的InputStream值传递给jsp页面中的ajax并将其转换为Json Array

公良云
2023-03-14
问题内容

我想将Struts2动作类的json数组传递给jsp页面。我正在尝试将数据集作为字符串发送。我想知道的是,如何读取javascript中的数据。

这是我在动作课中的方法

private InputStream inputStream;

/* getter and setter*/

public String getClientMilestone() throws DAOTransientException, DBConfigException{
        PaymentScheduleDao paymentScheduleDao = new PaymentScheduleDao();
        List <PaymentMilestone> paymentScheduleInfo = paymentScheduleDao.getClientMilestoneInfo(projectId);
        String result = "[";

        for(int i=0; i<paymentScheduleInfo.size(); i++){

            result += "{"+"'"+"item"+i+"' : {"+ "'"+"milestoneName"+ "'"+":"+"'"+paymentScheduleInfo.get(i).getMilestone_name()+"'"+"}"+"},";

        }
        result += "]";
        System.out.println("result is "+result);
        inputStream = new StringBufferInputStream(result);
        return "success";
    }

打印如下

result is [{'item0' : {'milestoneName':'milestone 1'}},{'item1' : {'milestoneName':'milestone 2'}}]

struts.xml

<package name="ClientMilestone" namespace="/" extends="struts-default">
        <action name="getClientMilestone" class="packageName.PaymentScheduleAction" method="getClientMilestone">
            <result name="success" type="stream">
            <param name="contentType">text/html</param>
            <param name="inputName">inputStream</param>
            </result>
            <result name="failure">./LandingPage.jsp</result>
            <result name="error">./Error.jsp</result>
        </action>
    </package>

jsp中的javascript函数

function createOrViewPs() {

    var projectId = document.getElementById("projectId").value;
    $.ajax({ 
        method: "GET",
        url: "getClientMilestone",
        data: {"projectId" : projectId},
        traditional: true, 
        success:
            function(result){
                var jsonArr = result;

                for (var i=0; i<jsonArr.length; i++)
                    for (var name in jsonArr[i]) {
                        alert("Item name: "+name);
                        alert("Source: "+jsonArr[i][name].milestoneName);
                }
            },
        error: 
            function(){
                alert("fail");
            }
    });         
}

问题答案:

因为您从服务器返回了带有stream结果类型的JSON字符串化版本(请注意,该流结果类型可能不合适,请参见下文),所以您需要使用JSON.parse()将其解析为JSON,如果您使用的是jQuery最好使用$
.each

var jsonArr = JSON.parse(result);
$.each (jsonArr, function(index, value){
  $.each (value, function(key, value){
    console.log("Item name: "+key);
    console.log("Source: "+value.milestoneName);
  });
});

您做错的是手动构建json。您应该使用将Java对象序列化为JSON的工具。Struts2 在软件包中具有json-lib可用的jar,可用于序列化为json,或者,如果您正在使用,struts2-json- plugin则它具有内置的序列化器。如果您正在使用,struts2-rest- plugin则可以使用其他串行器,例如Jackson。您选择用于序列​​化数据的库的方式超出了此答案的范围。您可以在SO和Struts网站上找到许多示例。它们中的大多数使用JSON插件返回浏览器支持的JSON对象,即不需要解析,但是对JSON进行解析对于避免错误和数据丢失很有用。



 类似资料:
  • 问题内容: 谁能告诉我如何在JSP中将JavaScript值传递给Scriptlet? 问题答案: 您的javascript值是客户端,您的scriptlet正在服务器端运行。因此,如果您想在scriptlet中使用javascript变量,则需要提交它们。 为此,可以将它们存储在输入字段中并提交表单,或者执行ajax请求。我建议您对此进行研究。

  • 我用jetty web server实现了这一点。 前提是web服务器已经启动。 我用JSP编写的主页试图从传入连接中获取IP地址。 因此,我将它分成两个JSP页面。(比方说,a.jsp和b.jsp) b、 jsp用于获取客户端ip地址,然后在 a、 jsp专门用于显示从b.jsp获得的ip地址。 我有一个静态字符串在我的b.jsp用于存储传入的连接IP地址。 两个问题: > 如何将值从b.jsp

  • 我试图弄清楚如何将存储在整数数组中的数组输出到jsp页面,最好是输入字段。 有人知道如何在jsp页面上输出数组吗? 我可以在Eclipse中将数组序列打印到控制台,但不确定如何使用jsp页面: 我使用以下解决方案为一个数字实现了这一点: Servlet(FibonacciServlet): Jsp页面(结果):

  • 这是将自定义对象从servlet传递到ajax并显示在jsp页面中的任何方法吗?当从jsp页面接受inventory id时,它将传递到servlet,并根据id获取inventory对象。之后,我想将inventory对象传递回ajax并显示在jsp页面中

  • 我已经创建了liferay portlet,在其中,我只需从Api获取天气数据,并通过ajax获取数据,如下所示,现在我想将这些json数据从ajax传递到portlet页面,并将其保存在portlet文件中。我是liferay的新手,请任何人指导如何做到这一点。 这是portlet文件

  • 我想在我的组件中触发一个动作。这是一个表示组件,不需要重新创建。路由器实现是使用反应路由器冗余完成的。 main.js 应用:日新社: header.js: employee.js: action-creator.js: 道具将不包含动作,因为我没有将它绑定到道具上。我尝试在App.js中编写mapStateToProps和mapDispatchToProps,如下所示: 导出默认连接(mapSt