Skip to main content
 首页 » 编程设计

java之如何将Struts 2操作类中的InputStream值传递给JSP页面中的Ajax并将该值转换为JSON数组

2026年07月28日9pander-it

我想将 JSON 数组从 Struts 2 操作类传递到 JSP 页面。我正在尝试将数据集作为字符串发送。我想知道的是,如何在 JavaScript 中读取这些数据。

这是我在 Action 类中的方法:

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 JSON.parse()如果你使用 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 site 上找到许多示例。 。大多数使用 json 插件,返回浏览器支持的 JSON 对象,即不需要解析,但是解析 JSON 有助于避免错误和数据丢失。